1

我想等待 1 分钟,然后执行一个函数f()。我发现在Javascript中没有sleep()函数,但我可以使用setInterval()setTimeout()函数。

window.setInterval()函数有效,但这不是我想要的。我只想执行一次f()。我尝试如下使用setTimeout() 函数。

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扩展的一部分。

4

4 回答 4

4

有你的问题:"this.f()"。将其替换为:

setTimeout(this.f.bind(this), 60000);

它应该可以工作。将字符串传递给setInterval()永远不是一个好的解决方案,就像使用eval().

也可以看看

于 2012-06-02T13:04:31.863 回答
3

尝试

setTimeout( this.f.bind(this), 60000 );

切勿将字符串传递给,setTimeout因为它将在全局上下文中进行评估。

于 2012-06-02T13:04:23.137 回答
1

如果您在 chrome 中运行计时器,还请查看 nsiTimer:https ://developer.mozilla.org/en/nsITimer

于 2012-06-03T04:24:03.077 回答
0

由于该代码适用于您应该使用的 Firefox 扩展

setTimeout(function() { alert('timeout') },2000);

setTimeout(alert('timeout'),2000); // will be executed directly, not suitable 
于 2018-09-27T05:34:14.490 回答