如何在调用没有圆括号的函数时传递参数[Javascript]
我有一个名为“tryMe”的函数,我没有括号括起来就是这样调用它,但这个想法就像你会在这里做的那样:如何在调用没有圆括号的函数时传递参数[Javascript]
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);
@帕特里克dw,你是对的,必须先进行评估。
只要确保你没有改变你的参数值超时之前触发。 – lincolnk
您的更新不会与原始文件有任何不同。为了确保在调用setTimeout时存在的值,您需要调用一个函数,在* that *函数中本地引用它们,并让该函数返回一个引用本地定义的引用的函数。 – user113716
更优雅的方法是使用__setTimeout(tryMe.bind(window,parm1,parm2),200); __。 bind()不支持IE8或更低版本,但可以使用javascript等效实现。 –
您可以将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毫秒后调用该函数。你只是提供需要被调用的函数。火狐实际上允许在setTimeout
调用指定其他参数:
setTimeout(tryMe, 200, "first parameter", "second parameter");
不过,据我所知,没有其他的浏览器都支持此功能,因此你应该使用闭包功能通过其他的答案已经解释。在此创建一个临时函数,其唯一目的是用正确的参数调用原始函数。
setTimeout(function() {tryMe("first parameter", "second parameter")}, 200);
它执行的原因是函数被计算并且函数的结果被传递给'setTimeout';函数本身并不像你期望的那样传递。 – Marc
描述你在做什么是不正确的,“调用没有括号的函数”。该函数不会在您发布在您的问题中的声明中调用。相反,函数的* reference *被传递给另一个函数('setTimeout'),在另一个时间(200毫秒后,实际上)用**圆括号(概念上)调用函数**。尽管如此,你在这里问的是一个非常常见的混淆点,答案并不明显。 – Pointy
@Pointy谢谢你向我解释=) – Tsundoku