2012-09-08 192 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/) –

相关问题