javascript - 谷歌浏览器在alert()函数上的不可预测的行为

标签 javascript google-chrome dom-events settimeout alert

如您所见,当 setTimeout 填充 Google Chrome 的事件队列时,alert() 等阻塞类型的函数不按顺序生成其输出() 函数,基于此代码:

for (var i = 1; i <= 6; i++) {

 (function(index){ 

     setTimeout(function() { alert(index) }, 100);

 })(i);

}
  • 这是为什么?
  • 这是否被视为 Google Chrome 的错误?

对此应该有一个解释。

最佳答案

一般来说,期望在任何给定的时刻(例如,以毫秒精度),只有一个执行槽和任何事件(例如setTimeout)是有道理的> 回调)在那一刻发生的事情应该全部在一个队列中。这似乎是OP的期望。

但是,没有什么要求浏览器以这种方式工作,而且安排事情的实际情况要复杂得多,并且也因浏览器而异。

因此,最好的选择是永远不要依赖任何两个事件的相对顺序,无论您认为它们应该有多么可预测。

我在这里有一篇存档的博客文章,内容是关于计时器的特殊性质以及我对它们的(类似)挫败感:https://web.archive.org/web/20151029223348/http://blog.getify.com/on-the-nature-of-timers

关于javascript - 谷歌浏览器在alert()函数上的不可预测的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40073278/

相关文章:

javascript - 使用 JavaScript 在 Phaser.io 中单击一次后禁用单击

javascript - 如何捕获回车键按下?

javascript - 将偏移量添加到javascript

javascript - 什么是事件的 Javascript 原子执行单元?

html - 无法在特定尺寸的 Canvas 上绘制

javascript - 查看 youtube.com 时,我可以从 Chrome Dev Console 控制视频吗?

javascript - 如何在nodejs内部调用导出函数?

javascript - xcode 使用错误的 node.js 版本

javascript - 连续的 █ 字符在 HTML 中产生彩色线条

javascript - Angular 中的范围继承 $broadcast