12

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

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

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

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

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

当然,当超时触发时,myGreatFunction它不是一个可识别的函数,因此它不会执行。

我希望javascript让我这样做,但它不会:

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

有没有一个很好的方法来解决这个问题?

4

2 回答 2

29

如果您不需要myGreatFunction使用任何参数调用,则应该能够传递setTimeout函数引用:

setTimeout(myGreatFunction, 1000);

此外,您应该始终避免传递setTimeout需要评估的代码(当您将代码用引号括起来时会发生这种情况)。相反,将代码包装在一个匿名函数中:

setTimeout(function() {
    // Code here...
}, 1000);

有关更多信息,请参阅Mozilla 开发中心的 setTimeout 页面

史蒂夫

于 2009-04-28T10:02:29.473 回答
14

谁说它不让你做?

确实如此,代码 -

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

是完全有效的。

于 2009-04-28T10:02:06.510 回答