如何在调用没有圆括号的函数时传递参数[Javascript]

问题描述:

我有一个名为“tryMe”的函数,我没有括号括起来就是这样调用它,但这个想法就像你会在这里做的那样:如何在调用没有圆括号的函数时传递参数[Javascript]

setTimeout(tryMe,200); 

如何传递我需要的参数?

我正在使用一个jquery插件,使我可以调用一个函数,但我必须调用它与括号或它加载时执行它自己。

+1

它执行的原因是函数被计算并且函数的结果被传递给'setTimeout';函数本身并不像你期望的那样传递。 – Marc

+2

描述你在做什么是不正确的,“调用没有括号的函数”。该函数不会在您发布在您的问题中的声明中调用。相反,函数的* reference *被传递给另一个函数('setTimeout'),在另一个时间(200毫秒后,实际上)用**圆括号(概念上)调用函数**。尽管如此,你在这里问的是一个非常常见的混淆点,答案并不明显。 – Pointy

+0

@Pointy谢谢你向我解释=) – Tsundoku

setTimeout(function() { tryMe(parm1, parm2); }, 200); 

一个更强大的产品,以确保 parm1值, parm2不超时火灾前更改(每@ lincolnk的评论):

setTimeout(function() { 
    var p1 = parm1; 
    var p2 = parm2; 
    tryMe(p1, p2); 
}, 200); 

@帕特里克dw,你是对的,必须先进行评估。

+3

只要确保你没有改变你的参数值超时之前触发。 – lincolnk

+1

您的更新不会与原始文件有任何不同。为了确保在调用setTimeout时存在的值,您需要调用一个函数,在* that *函数中本地引用它们,并让该函数返回一个引用本地定义的引用的函数。 – user113716

+0

更优雅的方法是使用__setTimeout(tryMe.bind(window,parm1,parm2),200); __。 bind()不支持IE8或更低版本,但可以使用javascript等效实现。 –

您可以将tryMe包装在封口中。

例如:

var f = function(){tryMe('some parameter');}; 
setTimeout(f, 200); 

在这里,我们创建一个功能对象,f,它调用tryMe与期望的参数(一个或多个)。然后我们通过fsetTimeout。当超时到期时,将调用f,然后调用tryMe和期望的参数。

提醒一句,如果你希望在可能的超时之前更改参数传递被调用(例如,如果你是在一个for回路设置几个超时):你将要绑定这些变量,像这样:

var f = function(someParamter){return function(){tryMe(someParameter);};}; 
setTimeout(f(someParameter), 200); 

的原因简单地做喜欢

setTimeout(tryMe('some parameter'), 200); //Does not work. 

东西不工作是因为你逝去的评估tryMe,而不是函数对象本身tryMe的结果。

+0

这应该是正确的答案 –

您没有在200毫秒后调用该函数。你只是提供需要被调用的函数。火狐实际上允许在setTimeout调用指定其他参数:

setTimeout(tryMe, 200, "first parameter", "second parameter"); 

不过,据我所知,没有其他的浏览器都支持此功能,因此你应该使用闭包功能通过其他的答案已经解释。在此创建一个临时函数,其唯一目的是用正确的参数调用原始函数。

setTimeout(function() {tryMe("first parameter", "second parameter")}, 200);