【问题标题】:setTimeout - how to avoid using string for callback?setTimeout - 如何避免使用字符串进行回调?
【发布时间】:2010-10-22 06:41:34
【问题描述】:

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

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

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

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

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

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

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

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

有什么好办法解决这个问题吗?

【问题讨论】:

  • "当使用 setTimeout 时,你必须把你想要执行的代码放到一个字符串中" 你当然不会……事实上,你不应该
  • @Tomalak - 是的,你是对的。请参阅对 Kirtan 回答的评论...:/
  • 其实我看到了;为了其他可能看到这个问题的人,只是想在这里明确表示:)

标签: javascript settimeout


【解决方案1】:

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

setTimeout(myGreatFunction, 1000);

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

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

请参阅setTimeout page at the Mozilla Development Centre 了解更多信息。

史蒂夫

【讨论】:

    【解决方案2】:

    谁说它不让你做?

    确实如此,代码 -

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

    完全有效。

    【讨论】:

    • 哈哈 - 是的,你是对的。一个不相关的错误意味着它看起来我的函数实际上没有被调用。这让我处于有点尴尬的境地,想要对我自己的问题投反对票……
    猜你喜欢
    • 2013-08-01
    • 2011-05-17
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    相关资源
    最近更新 更多