作者mhsu2k9 (mhsu2k9)
看板Ajax
标题[问题] setTimeout 在Chrome下的问题
时间Wed Dec 7 01:05:17 2011
最近在研读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
1F:推 UniFish:关键字:async, multi thread 12/07 01:07
2F:推 sk1765:这没什麽 只能说chrome的实作比较好 for的速度太快 导致 12/07 13:35
3F:→ sk1765:settimeout那行送出去还没丢进queue 已经for下一次了 12/07 13:36
5F:→ sk1765:settimeout 前加一个耗时的 for j loop 我一直把数字调到 12/07 13:39
6F:→ sk1765:100000 不照顺序的情况还是恢复了 12/07 13:39
7F:推 kerash:楼上,我跑一样式不照顺序。 12/07 15:04
8F:→ sk1765:可能电脑太快 再加零罗 12/07 15:09
9F:→ kerash:我已经多加两个 0 ... 12/07 15:25
10F:→ grence:非同步很难保证顺序. delay 0, 5, 10, 15ms都不一定会正确 12/08 01:25
11F:→ sk1765:这跟async,multi thread都没关系啦 只能说chrome实作把 12/08 12:07
12F:→ sk1765:settimeout加到queue的实作是在这整个程式执行完才开始 12/08 12:09
14F:→ sk1765:settimeout不照顺序之前 若是有thread 会交错出现 12/08 12:12