Javascript 谷歌浏览器&x27;在alert()函数上的不可预测行为
正如您所看到的,当Google Chrome的事件队列中由Javascript 谷歌浏览器&x27;在alert()函数上的不可预测行为,javascript,google-chrome,dom-events,settimeout,alert,Javascript,Google Chrome,Dom Events,Settimeout,Alert,正如您所看到的,当Google Chrome的事件队列中由setTimeout()函数填充时,类似于alert()的阻塞类函数会产生其输出不按顺序,基于以下代码: for (var i = 1; i <= 6; i++) { (function(index){ setTimeout(function() { alert(index) }, 100); })(i); } 对于(var i=1;i通常,期望在任何给定时刻(例如,毫秒精度)只有一个执行槽是有道理的,并且
setTimeout()
函数填充时,类似于alert()
的阻塞类函数会产生其输出不按顺序,基于以下代码:
for (var i = 1; i <= 6; i++) {
(function(index){
setTimeout(function() { alert(index) }, 100);
})(i);
}
对于(var i=1;i通常,期望在任何给定时刻(例如,毫秒精度)只有一个执行槽是有道理的,并且在该时刻发生的任何事件(如setTimeout
callbacks)都应该在一个队列中。这似乎是OP的期望
然而,没有任何东西需要浏览器以这种方式工作,而且事情的日程安排方式要复杂得多,而且浏览器也会有所不同
所以,最好的办法是永远不要依赖于任何两个事件的相对顺序,不管你认为它们应该是可预测的
我在这里有一篇关于计时器的特殊性质和我(类似)对计时器的失望的存档博文:分别说:为了清楚起见,你告诉chrome执行6次alert()
100毫秒后同时运行。你期望什么?我期望它们像其他浏览器一样按顺序打印…那么你的逻辑是错误的。期望计算机同时执行多个任务是很奇怪的(js中没有多线程)。您需要将循环移到setTimeout内才能获得预期的结果。opera也有此问题