Google Chrome在alert()功能上的不可预知的行为
正如你所看到的,像alert()这样的阻塞类型的函数在通过setTimeout()函数填充Google Chrome的事件队列时根据此代码生成其输出的顺序不正确 。
for (var i = 1; i <= 6; i++) {
(function(index){
setTimeout(function() { alert(index) }, 100);
})(i);
}
应该有一个解释。
一般来说,期望在任何特定时刻(比如说,以毫秒为精度)只有一个执行时隙,并且在那一刻应该发生的任何事件(如setTimeout
回调)应该都在单个队列中。 这似乎是OP的期望。
然而,没有什么东西需要浏览器以这种方式工作,并且事情如何进行计划的现实要复杂得多,并且也因浏览器而异。
所以,最好的办法是不要依赖任何两个事件的相对顺序,不管你认为他们应该有多可预测。
我在这里有一篇关于定时器特有性质的博客文章,以及我对他们的类似挫折:https://web.archive.org/web/20151029223348/http://blog.getify.com/on-the-自然的老前辈
链接地址: http://www.djcxy.com/p/51923.html上一篇: Google Chrome's unpredictable behaviour on alert() function
下一篇: Added Sentry debugging, getting long string as undefined