如果我调用clearTimeout
来处理一个setTimeout
事件,而这个事件已经被触发,但是它的回调仍然在执行队列中,那么clearTimeout
是否仍然会阻止这个事件被处理?
换句话说,在计时器触发和执行回调的延迟期间,是否仍有可能清除超时事件?
非正式地说,我的猜测是,一旦超时触发,它就将回调排队并销毁自己--使具有该计时器ID的clearTimeout
对排队的回调没有影响。
如果我调用clearTimeout
来处理一个setTimeout
事件,而这个事件已经被触发,但是它的回调仍然在执行队列中,那么clearTimeout
是否仍然会阻止这个事件被处理?
换句话说,在计时器触发和执行回调的延迟期间,是否仍有可能清除超时事件?
非正式地说,我的猜测是,一旦超时触发,它就将回调排队并销毁自己--使具有该计时器ID的clearTimeout
对排队的回调没有影响。
1条答案
按热度按时间72qzrwbm1#
我认为答案是yes(我现在使用的是Firefox)。
这个想法是两个计时器应该在脚本块完成后立即“就绪”,并且它们应该按照请求的顺序运行。因此,“t1”应该在浏览器运行回调之前清除“t2”。因为没有
alert()
发生,所以我得出结论,clearTimeout()
调用“工作”,因为它阻止了第二个回调的运行,即使它的计时器已经过期。我对浏览器的工作原理并不熟悉,所以在某些情况下
clearTimeout()
可能没有同样的效果,无论如何,考虑到执行模型,这似乎是非常不确定的。