正如您所看到的那样,当 setTimeout填充Google Chrome的事件队列时,阻止类型的功能(如 alert()会产生输出不按顺序 ()功能,基于此代码。
for (var i = 1; i <= 6; i++) {
(function(index){
setTimeout(function() { alert(index) }, 100);
})(i);
}
应该有解释。
答案 0 :(得分:2)
一般来说,期望在任何给定的时刻(例如,以毫秒精度),只有一个执行槽和任何事件(如{{1}应该在时刻发生的回调应该都在一个队列中。这似乎是OP的期望。
但是,没有任何东西需要浏览器以这种方式工作,事情如何安排的现实要复杂得多,而且因浏览器而异。
所以,最好的办法是永远不要依赖任何两个事件的相对排序,无论你认为它们有多少可以预测。
我在这里有一个存档的博客文章,关于计时器的特殊性质以及我对他们的(类似)挫折:https://web.archive.org/web/20151029223348/http://blog.getify.com/on-the-nature-of-timers