Javascript Timeout对象究竟是什么?

时间:2012-10-26 02:11:01

标签: javascript javascript-events settimeout

以下是一些示例代码的链接。

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

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

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

例如

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

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

3 个答案:

答案 0 :(得分:4)

setTimeoutsetInterval会返回一个数字。该数字是计时器的id。可以分别使用clearTimeoutclearInterval停止活动计时器。

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

{
  called : bool
  _idleTimeout : null
  _idlePrev : null
  _idleNext : null
  _idleStart : null
  _onTimeout : function (){}
  _repeat : null
  unref : function () {}
  ref : function () {}
  close : function () {}
}