2

正如你可以看到阻斷一種功能類似警報()產生並不是爲了當通過的setTimeout填寫的谷歌Chrome瀏覽器的事件隊列輸出()函數,基於這個代碼。谷歌Chrome的警覺不可預知的行爲()函數

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

(function(index){ 

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

})(i); 

} 
  • 這是爲什麼?
  • 它被視爲Google Chrome的錯誤嗎?

應該有一個解釋。

+1

分別:說什麼導致你看到的,爲了清楚。 –

+0

您正在告訴chrome同時執行**(alert()'函數* ** ** 100毫秒後執行** 6 **次。你能指望什麼? –

+0

我希望它們能像其他瀏覽器一樣被打印出來...... –

回答

2

一般來說,它使八九不離十感期待,在任何給定時刻(比方說,在毫秒級精度),只有一個插槽執行的,在那個時刻應該發生的任何事件(如setTimeout回調)應該都在一個隊列中。這似乎是OP的期望。

但是,沒有什麼東西需要瀏覽器以這種方式工作,並且事情如何進行計劃的實際情況要複雜得多,並且也因瀏覽器而異。

所以,最好的選擇是永遠不要依賴任何兩個事件的相對順序,不管你認爲他們有多可預測。

我有一個存檔此處的博客文章有關定時器和我(類似)坎坷的特殊性質與他們:https://web.archive.org/web/20151029223348/http://blog.getify.com/on-the-nature-of-timers