Javascript 为什么我的设置间隔停止工作?
当我添加“for”时,为什么“setInterval”停止工作Javascript 为什么我的设置间隔停止工作?,javascript,Javascript,当我添加“for”时,为什么“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); } </scrip
<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>
var x=0;
setInterval(函数(){counter()},1);
函数计数器()
{
x++;
}
对于(var start=0;start,因为Javascript不是(在本例中)多线程的,所以您的setInterval基本上意味着“下次主线程不做任何事情并且超时已经过去时,让它执行我的回调”
for循环会阻止主线程,直到它完成为止(并且在显示101个警报之前它不会退出,每个警报都在等待用户输入),因此在for循环结束并且主线程可以返回“不做任何事情”之前,回调不会发生。,因为Javascript没有(在本例中)多线程,您的setInterval基本上意味着“下次主线程不做任何事情并且超时已经过去,让它执行我的回调”
for循环会阻止主线程,直到它完成为止(并且在显示101个警报之前它不会退出,每个警报都在等待用户输入),因此在for循环结束并且主线程可以返回“不做任何事情”之前,回调不会发生.不妨注意,问题不完全在于
的,而在于警报
,这通常是一个同步动作,会停止脚本执行。@Fabriciomatté是的,谢谢,我对原因的描述有点欠缺,在回答中添加了一条关于这一点的注释。+1,尽管DOM 0警报
>没有规范,浏览器可能会有不同的解释。例如,OP的时间间隔将在Firefox 15-18上的警报之间间歇性执行,而在Chrome上它们将完全同步。@SamK。这将取决于您试图做什么。尝试测量循环的时间?@SamK。然后我建议您只做varstime=new Date()
在循环和警报的开始处(或者更好地登录到控制台)new Date()-stime
在合适的位置显示自stime
以来的毫秒数,这将不需要任何超时运行。不妨注意,问题不完全是的,而是警报
,这通常是一个同步操作,会停止脚本执行。@Fabriciomatté是的,谢谢,我是我对原因的描述有点欠缺,在回答中添加了一条关于这一点的评论。+1,尽管DOM 0alert
没有规范,浏览器可能会对其进行不同的解释。例如,OP的间隔将在Firefox 15-18上的警报之间间歇性执行,而在Chrome上则完全同步。@SamK。这将取决于您尝试执行的操作。尝试测量循环的计时?@SamK。然后我建议您在循环开始时执行var stime=new Date()
,并发出警报(或者更好地登录到控制台)new Date()-stime
在合适的位置显示自stime
以来的毫秒数,这将不需要任何超时来运行。