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

Javascript setTimeout-如何避免使用字符串进行回调?,javascript,settimeout,Javascript,Settimeout,使用setTimeout时,必须将要执行的代码放入字符串中: setTimeout('alert("foobar!");', 1000); 但是,我想执行一个函数,我在变量中有一个引用。我希望能够做到这一点: var myGreatFunction = function() { alert("foobar!"); }; // ... setTimeout('myGreatFunction();', 1000); (尽管在现实生活中,警报是一段较长的代码,myGreatFunction作为参数

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

setTimeout('alert("foobar!");', 1000);
但是,我想执行一个函数,我在变量中有一个引用。我希望能够做到这一点:

var myGreatFunction = function() { alert("foobar!"); };
// ...
setTimeout('myGreatFunction();', 1000);
(尽管在现实生活中,警报是一段较长的代码,
myGreatFunction
作为参数传递给其他函数,在这些函数中调用
setTimeout
。)

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

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

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

有什么好办法吗?

谁说它不让你这么做的

是的,代码-

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

是完全有效的。

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

setTimeout(myGreatFunction, 1000);
此外,您应该始终避免传递它需要计算的
setTimeout
代码(这是将代码用引号括起来时发生的情况)。相反,请将代码包装在匿名函数中:

setTimeout(function() {
    // Code here...
}, 1000);
有关更多信息,请参阅


史蒂夫

哈哈-是的,你说得对。一个无关的bug意味着我的函数在实际被调用时似乎没有被调用。这让我有点尴尬,因为我想否决我自己的问题……”当使用setTimeout时,你必须将你想要执行的代码放入一个字符串中“你肯定不会。。。事实上,你不应该。@Tomalak-是的,你是对的。见科坦回答的评论…:/其实我看到了,;我只是想在这里说清楚,因为其他人可能会看到这个问题:)