我有一个名为“tryMe”的函数,我在没有括号的情况下调用它,但这个想法就像你在这里做的那样:
setTimeout(tryMe,200);
如何传递我需要的参数?
我正在使用一个jquery插件,它允许我调用一个函数,但是我必须用括号调用它,否则它会在加载时自行执行。
答案 0 :(得分:11)
setTimeout(function() { tryMe(parm1, parm2); }, 200);
一个更强大的产品,确保parm1
,parm2
的值在超时发生之前不会发生变化(根据@ lincolnk&#39;评论):< /击>
setTimeout(function() {
var p1 = parm1;
var p2 = parm2;
tryMe(p1, p2);
}, 200);
击> <击> 撞击>
@patrick dw,你是对的,必须先评估。
答案 1 :(得分:4)
您可以将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
本身的结果。
答案 2 :(得分:0)
在200毫秒之后,你没有调用该功能,浏览器会这样做。您只是向它提供需要被调用的函数。 Firefox实际上允许在setTimeout
调用中指定其他参数:
setTimeout(tryMe, 200, "first parameter", "second parameter");
但是,据我所知,没有其他浏览器支持此功能,因此您应该使用封闭功能,正如其他答案所解释的那样。在这里,您可以创建一个临时函数,其唯一目的是使用正确的参数调用原始函数。
setTimeout(function() {tryMe("first parameter", "second parameter")}, 200);