setTimeout - 如何避免使用字符串进行回调?

时间:2009-04-28 09:59:15

标签: javascript settimeout

使用setTimeout时,必须将要执行的代码放入字符串中:

setTimeout('alert("foobar!");', 1000);

但是,我想执行一个函数,我在变量中有一个引用。我希望能够做到这一点:

var myGreatFunction = function() { alert("foobar!"); };
// ...
setTimeout('myGreatFunction();', 1000);

(虽然在现实生活中,警报是一段较长的代码,myGreatFunction作为参数传递给其他函数,其中setTimeout被调用。)

当然,当超时触发时,myGreatFunction不是可识别的功能,因此它不会执行。

我希望javascript让我这样做,但它没有:

setTimeout(function() { myGreatFunction(); }, 1000);

这有什么好办法吗?

2 个答案:

答案 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);

完全有效。