javascript是单线程的,浏览器遇到setTimeout或者setInterval会先执行完当前的代码块,在此之前会把定时器推入浏览器的待执行事件队列里面,等到浏览器执行完当前代码之后会看一下事件队列里面有没有任务,有的话才执行定时器的代码。 所以即使把定时器的时间设置为0还是会先执行当前的一些代码,如下面所示:
function test() {
var bb = 0;
var testSet = setInterval(function(){
bb++;
console.log(11);
if(bb<10){
clearInterval(testSet);
}
},0);
var test2 = setTimeout(function(){
console.log(22);
},0)
for(var i=0;i<10;i++){
console.log('aa');
}
}
test() ;
输出结果
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
11
22