2012-09-08 189 views
1

當我添加'for'時,爲什麼'setInterval'停止工作?爲什麼我的setInterval停止工作?

<script> 
    var x=0; 
    setInterval(function() {counter()},1); 
function counter() 
{ 
    x++; 
} 
for(var start=0; start <= 100; start++) 
    { 
     alert("x is "+x+" and start is "+start); 
    } 
</script> 

回答

6

由於Javascript的話(這種情況下)多線程,你的setInterval基本意思是「主線程沒有做任何事情下一次和超時已過,有它執行我的回調」。

您的for循環會阻塞主線程,直到完成爲止(並且它不會退出,直到它顯示101條警報,每條警報都等待用戶輸入爲止),所以直到for循環結束時纔會發生回調,並且主線程可以回到「不做任何事情」。

+0

不妨注意,問題並不完全是'for',而是'alert',這通常是一個停止腳本執行的同步操作。 –

+0

@FabrícioMatté是的,謝謝,我對描述原因有點缺乏,在答案中加了一條評論。 –

+0

+1,即使DOM 0'alert'沒有規範,瀏覽器可能會以不同的方式解釋它。例如,OP的時間間隔將在Firefox 15-18的警報間歇執行,而它們將在Chrome上完全同步。 [小提琴](http://jsfiddle.net/ult_combo/7vDG8/) –

相關問題