如您所见,当 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/