以下是一些示例代码的链接。
在我开始测试之前,我假设setTimeout()
的返回值是某种浏览器对象。
实际上它似乎是一个简单的整数。我还认为将setTimeout
的返回值赋给全局变量意味着只能有一个这样的对象。但是,如果您看到多次单击“启动计时器”按钮,可以同时运行多个计时器。
例如
timeout 1
timeout 2
timeout 1
由于四秒内火灾而在五秒钟内timeout 2
timeout 2
用户点击创建多个计时器的问题可以通过在设置之前始终清除当前超时var来解决。但我真的很想了解Javascript在这里做了什么。
答案 0 :(得分:4)
setTimeout
和setInterval
会返回一个数字。该数字是计时器的id
。可以分别使用clearTimeout
和clearInterval
停止活动计时器。
如果你丢失了计时器的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 () {}
}