我想等一分钟,然后执行一个函数 f()。我发现在 Javascript 中没有 sleep()函数,但我可以使用 setInterval()或 setTimeout( )功能。
window.setInterval()函数有效,但这不是我想要的。我只想执行一次 f()。我尝试使用 setTimeout() function,如下所示。
var MyNamespace {
...
f: function() {
},
...
click: function() {
...
setTimeout("this.f()", 60000); // f() is never executed
// setTimeout(this.f(), 60000); f() is executed immediately without timeout
// window.setTimeout(...) doesn't help
},
...
}
这里可能有什么问题?
该代码是 Firefox 扩展程序的一部分。
答案 0 :(得分:4)
你的问题是:"this.f()"
。替换为:
setTimeout(this.f.bind(this), 60000);
它应该有效。将字符串传递给setInterval()
绝不是一个好的解决方案,就像使用eval()
一样。
答案 1 :(得分:3)
尝试
setTimeout( this.f.bind(this), 60000 );
永远不要将字符串传递给setTimeout
,因为它将在全局上下文中进行评估。
答案 2 :(得分:1)
如果您在chrome中运行计时器,请查看nsiTimer:https://developer.mozilla.org/en/nsITimer
答案 3 :(得分:0)
由于该代码用于Firefox扩展,因此应使用
setTimeout(function() { alert('timeout') },2000);
setTimeout(alert('timeout'),2000); // will be executed directly, not suitable