如何在没有括号的情况下调用函数时传递参数
我有一个名为“tryMe”的函数,我在没有括号的情况下调用它,但这个想法就像你在这里做的那样:
setTimeout(tryMe,200);
如何传递我需要的参数?
我正在使用一个jquery插件,它允许我调用一个函数,但我必须用括号调用它,或者它在加载时自行执行。
setTimeout(function() { tryMe(parm1, parm2); }, 200);
一个更强大的产品,以确保 parm1
, parm2
的值在超时之前不会发生变化(根据@ 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);