如何在没有括号的情况下调用函数时传递参数

我有一个名为“tryMe”的函数,我在没有括号的情况下调用它,但这个想法就像你在这里做的那样:

setTimeout(tryMe,200); 

如何传递我需要的参数?

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

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

一个更强大的产品,以确保parm1parm2的值在超时之前不会发生变化(根据@ lincolnk的评论):

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

@patrick dw,你是对的,必须先评估。

你可以在一个闭包中包装tryMe

例如:

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

在这里,我们创建一个函数对象f ,它使用所需的参数调用tryMe 。 然后我们将f传递给setTimeout 。 当超时到期时,将调用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本身的结果。

你没有调用该函数,浏览器在200毫秒之后调用。 您只是为它提供需要被调用的函数。 Firefox实际上允许在setTimeout调用中指定其他参数:

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

但是,据我所知,没有其他浏览器支持此function,因此您应该使用其他答案已解释的闭包function。 在这里,您可以创建一个临时函数,其唯一目的是使用正确的参数调用原始函数。

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