谷歌Chrome在alert()函数上的不可预测行为

时间:2016-10-16 17:33:54

标签: javascript google-chrome javascript-events settimeout alert

正如您所看到的那样,当 setTimeout填充Google Chrome的事件队列时,阻止类型的功能(如 alert()会产生输出不按顺序 ()功能,基于此代码。

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

 (function(index){ 

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

 })(i);

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

应该有解释。

1 个答案:

答案 0 :(得分:2)

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

但是,没有任何东西需要浏览器以这种方式工作,事情如何安排的现实要复杂得多,而且因浏览器而异。

所以,最好的办法是永远不要依赖任何两个事件的相对排序,无论你认为它们有多少可以预测。

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