使用setTimeout
时,必须将要执行的代码放入字符串中:
setTimeout('alert("foobar!");', 1000);
但是,我想执行一个函数,我在变量中有一个引用。我希望能够做到这一点:
var myGreatFunction = function() { alert("foobar!"); };
// ...
setTimeout('myGreatFunction();', 1000);
(虽然在现实生活中,警报是一段较长的代码,myGreatFunction
作为参数传递给其他函数,其中setTimeout
被调用。)
当然,当超时触发时,myGreatFunction
不是可识别的功能,因此它不会执行。
我希望javascript让我这样做,但它没有:
setTimeout(function() { myGreatFunction(); }, 1000);
这有什么好办法吗?
答案 0 :(得分:29)
如果您不需要使用任何参数调用myGreatFunction
,您应该能够传递setTimeout
函数引用:
setTimeout(myGreatFunction, 1000);
此外,您应该始终避免传递它需要评估的setTimeout
代码(当您将代码包装在引号中时会发生这种情况)。而是将代码包装在匿名函数中:
setTimeout(function() {
// Code here...
}, 1000);
有关详细信息,请参阅setTimeout page at the Mozilla Development Centre。
史蒂夫
答案 1 :(得分:14)
谁说不让你这么做?
确实如此,代码 -
setTimeout(function() { myFunction(); }, 1000);
完全有效。