如果我调用clearTimeout
一个setTimeout
已经触发但其回调仍在执行队列中的事件,是否clearTimeout
仍会阻止该事件被处理?
换句话说,是否仍然可以在计时器触发延迟及其回调执行期间清除超时事件?
通俗地说,我的猜测是,一旦超时触发,它会将回调排队并自行销毁——clearTimeout
使用该计时器的 id 对排队回调没有影响。
如果我调用clearTimeout
一个setTimeout
已经触发但其回调仍在执行队列中的事件,是否clearTimeout
仍会阻止该事件被处理?
换句话说,是否仍然可以在计时器触发延迟及其回调执行期间清除超时事件?
通俗地说,我的猜测是,一旦超时触发,它会将回调排队并自行销毁——clearTimeout
使用该计时器的 id 对排队回调没有影响。
我认为答案是肯定的。(我目前正在使用 Firefox。)
编辑——为了完整起见,我构建的测试是这样的:
var t1 = setTimeout(function() {
clearTimeout(t2);
}, 0);
var t2 = setTimeout(function() {
alert("hello world");
}, 0);
这个想法是两个计时器应该在脚本块完成后立即“准备好”,并且它们应该按照请求的顺序运行。因此,“t1”应该在浏览器运行它的回调之前清除“t2”。因为没有alert()
发生任何事情,我得出的结论是clearTimeout()
调用“有效”,因为它阻止了第二个回调运行,即使它的计时器已经过期。
浏览器中的确切工作方式并不是我所熟悉的,因此在某些情况下可能clearTimeout()
不会产生相同的效果。无论如何,考虑到执行模型,这似乎是非常不确定的。