当我用下面的JavaScript打开HTML时,starting timer
会在控制台中被记录,但是我的鼠标图标就会旋转。
window.onload = function() {
console.log("starting timer");
var n = 0;
var id = setInterval(function() { console.log("hello"); n++ }, 100);
while(true) {
if( n > 5 ) {
clearInterval(id);
break;
}
}
console.log("finished timer");
}
我在这里创建了某种类型的无限循环吗?
答案 0 :(得分:4)
JavaScript / DOM是设计上的单线程。
虽然JS正在旋转你的这个循环:
while(true) {
...
}
没有其他JS代码被执行,包括你在setInterval()中提供的回调,因此n总是为零。
因此,是的,你在那里有无限循环。
答案 1 :(得分:2)
问题是JavaScript是单线程的。 (这是一个特性。)你的setInterval函数将不会执行,直到window.onload函数返回,它永远不会发生,因为中断永远不会发生,因为n永远不会增加。
答案 2 :(得分:1)
问题是while(true)
语句正在尽快重新运行。一旦完成,它就会重新启动,并且没有时间用于其他任何事情,冻结浏览器。你应该在其内部进行setInterval检查。 e.g:
window.onload=function(){
console.log('starting timer');
var n=0;
var id=setInterval(function(){console.log('hello');n++;if(n>5){
clearInterval(id);
console.log('finished timer');
},100);
}