如果我为一个已经触发但其回调仍在执行队列中的 setTimeout
事件调用 clearTimeout
,clearTimeout
是否仍然阻止处理该事件?
换句话说,是否仍然可以在定时器触发和回调执行的延迟期间清除超时事件?
通俗地说,我的猜测是,一旦超时触发,它会将回调排队并销毁自身——使用该计时器的 id 创建一个 clearTimeout
对排队的回调没有影响。
最佳答案
我认为答案是yes . (我目前使用的是 Firefox。)
编辑 — 为了完整起见,我构建的测试是这样的:
var t1 = setTimeout(function() {
clearTimeout(t2);
}, 0);
var t2 = setTimeout(function() {
alert("hello world");
}, 0);
想法是两个计时器应该在该脚本 block 完成后立即“就绪”,并且它们应该按照请求的顺序运行。因此,“t1”应该在浏览器运行其回调之前清除“t2”。因为没有 alert()
发生,所以我得出结论,clearTimeout()
调用“有效”,因为它阻止了第二个回调运行,即使它的计时器已经过期。
浏览器中的确切工作方式我并不熟悉,因此在某些情况下 clearTimeout()
可能没有相同的效果。考虑到执行模型,这似乎是不确定的。
关于javascript - clearTimeout 可以删除 Javascript 中触发的超时事件的未处理回调吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12165145/