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

时间:2011-08-24 13:32:55

标签: javascript jquery parameter-passing

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

setTimeout(tryMe,200);

如何传递我需要的参数?

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

3 个答案:

答案 0 :(得分:11)

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

一个更强大的产品,确保parm1parm2的值在超时发生之前不会发生变化(根据@ 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);