如何在调用不带括号的函数时传递参数 [Javascript]

How to pass parameters when calling a function without the parenthesis [Javascript]

本文关键字:参数 Javascript 函数 调用      更新时间:2023-09-26

我有一个名为"tryMe"的函数,我不带括号调用它,但不完全是这个,但这个想法就像你在这里要做的:

setTimeout(tryMe,200);

如何传递所需的参数?

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

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

一个更强大的产品,以确保 parm2 parm1 的值在超时触发之前不会更改(根据@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");

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

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