1

这是一些示例代码的链接。

http://jsfiddle.net/4djNt/2/

在我开始测试之前,我假设 a 的返回值setTimeout()是某种浏览器对象。

事实上,它似乎是一个简单的整数。我还相信将返回值setTimeout赋给一个全局变量意味着只能有一个这样的对象。但正如您将看到的,如果您多次单击“启动计时器”按钮,则可能有多个计时器同时运行。

例如

  • 我点击开始按钮
  • 该脚本创建一个超时
  • timeout 1,由于五秒内着火
  • 一秒钟后,我再次点击,现在有一个timeout 2
  • 现在我要在四秒和五秒内timeout 1开火timeout 2
  • 我点击停止按钮,只有timeout 2被清除

用户点击创建多个计时器的问题可以通过在设置之前始终清除当前超时变量来解决。但我真的很想了解 Javascript 在这里实际做了什么。

4

3 回答 3

5

setTimeoutsetInterval返回一个数字。编号是id计时器的编号。可以分别使用clearTimeout和停止活动定时器clearInterval

如果您丢失了计时器的 ID,您要么必须再次猜测它,要么等待它完成(假设它是超时)。

如果定时器在参数指定的毫秒数内没有被取消delay,它将在全局上下文中执行回调函数。

于 2012-10-26T02:15:58.333 回答
2

的返回值setTimeout可以传递给以clearTimeout防止计划任务运行。如果已设置变量并且再次按下按钮,clearTimeout请先运行,然后setTimeout假设您只希望安排第二次按下。

于 2012-10-26T02:14:53.200 回答
0

提问者只询问超时对象,例如,在某些环境中,这些对象会代替数字返回timeoutObject。为了取消回调,将整个超时对象传递给clearTimeout(toObj)就可以了。

{
  called : bool
  _idleTimeout : null
  _idlePrev : null
  _idleNext : null
  _idleStart : null
  _onTimeout : function (){}
  _repeat : null
  unref : function () {}
  ref : function () {}
  close : function () {}
}
于 2016-06-12T18:18:36.197 回答