clearTimeout可以删除JavaScript中已触发超时事件的未处理回调吗?

wztqucjr  于 2023-02-11  发布在  Java
关注(0)|答案(1)|浏览(149)

如果我调用clearTimeout来处理一个setTimeout事件,而这个事件已经被触发,但是它的回调仍然在执行队列中,那么clearTimeout是否仍然会阻止这个事件被处理?
换句话说,在计时器触发和执行回调的延迟期间,是否仍有可能清除超时事件?
非正式地说,我的猜测是,一旦超时触发,它就将回调排队并销毁自己--使具有该计时器ID的clearTimeout对排队的回调没有影响。

72qzrwbm

72qzrwbm1#

我认为答案是yes(我现在使用的是Firefox)。

  • edit* -为了完整起见,我构建的测试如下:
var t1 = setTimeout(function() {
  clearTimeout(t2);
}, 0);

var t2 = setTimeout(function() {
  alert("hello world");
}, 0);

这个想法是两个计时器应该在脚本块完成后立即“就绪”,并且它们应该按照请求的顺序运行。因此,“t1”应该在浏览器运行回调之前清除“t2”。因为没有alert()发生,所以我得出结论,clearTimeout()调用“工作”,因为它阻止了第二个回调的运行,即使它的计时器已经过期。
我对浏览器的工作原理并不熟悉,所以在某些情况下clearTimeout()可能没有同样的效果,无论如何,考虑到执行模型,这似乎是非常不确定的。

相关问题