看板 Ajax 關於我們 聯絡資訊
最近在研讀closure的寫法 有類似以下的範例: function doAlert(j){ var rtrAlert = function(){ alert(j); } return rtrAlert; } for(var i=0;i<=5;i++){ var func = doAlert(i); setTimeout(func,1000); } 以上的code,如果在Firefox下執行,會依序alert出1,2,3,4,5的值 但是若在Chrome下,alert出的數值順序是不規則的 如果把alert(j)這一行,換成document.writeln(j) 則寫出來的數值,又是依照1 - 5 排列的 想請教各位先進該如何解決? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.67.62.205
UniFish:關鍵字:async, multi thread 12/07 01:07
sk1765:這沒什麼 只能說chrome的實作比較好 for的速度太快 導致 12/07 13:35
sk1765:settimeout那行送出去還沒丟進queue 已經for下一次了 12/07 13:36
sk1765:參考 http://jsfiddle.net/NSeZw/5/ 在chrome執行 12/07 13:37
sk1765:settimeout 前加一個耗時的 for j loop 我一直把數字調到 12/07 13:39
sk1765:100000 不照順序的情況還是恢復了 12/07 13:39
kerash:樓上,我跑一樣式不照順序。 12/07 15:04
sk1765:可能電腦太快 再加零囉 12/07 15:09
kerash:我已經多加兩個 0 ... 12/07 15:25
grence:非同步很難保證順序. delay 0, 5, 10, 15ms都不一定會正確 12/08 01:25
sk1765:這跟async,multi thread都沒關係啦 只能說chrome實作把 12/08 12:07
sk1765:settimeout加到queue的實作是在這整個程式執行完才開始 12/08 12:09
sk1765:參考 http://jsfiddle.net/NSeZw/8/ i=0,1,2,3,4,5在所有的 12/08 12:11
sk1765:settimeout不照順序之前 若是有thread 會交錯出現 12/08 12:12