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

标签 javascript javascript-events

如果我为一个已经触发但其回调仍在执行队列中的 setTimeout 事件调用 clearTimeoutclearTimeout 是否仍然阻止处理该事件?

换句话说,是否仍然可以在定时器触发和回调执行的延迟期间清除超时事件?

通俗地说,我的猜测是,一旦超时触发,它会将回调排队并销毁自身——使用该计时器的 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/

相关文章:

javascript - 如何在 DOM 事件调用的方法中更改 Vue.js 数据值?

javascript - 如何根据 SRC 选择 iFrame 并添加类

Javascript 诗歌生成器——将子字符串与数组中的任何单个元素匹配

javascript-events - JavaScript 在运行时向事件添加多个函数

javascript - Attributes.Add Onclick Event in c# code behind

javascript - jQuery每个数组索引附加到div

javascript - 为什么在 addEventListener 回调中调用 removeEventListener?

JavaScript:如何以编程方式创建同一函数的单独排列?

javascript - 获取未加载的元素

javascript - 正则表达式获取 API 表单 URL 的版本