首页 > 代码库 > 浏览器Event Loop 是个什么鬼
浏览器Event Loop 是个什么鬼
首先我建议你去看看阮神的相关blog
下面我只想拿一些例子来说明问题,我不是很喜欢艰深的理论,那不够直接.
look:
setTimeout(function(){console.log(1)},0);
console.log(2)
上面的代码执行的顺序是 2 1
尽管定时器是0秒,还是延迟执行了,而且这个规则不会变.
look:
setTimeout(function(){console.log(1)},0);
console.log(2);
setTimeout(function(){console.log(3)},0);
上面的运行顺序是: 2 1 3
look:
setTimeout(function(){
console.log(1)
setTimeout(function(){console.log(3)},0);
},0);
console.log(2);
这个还是 2 1 3
look 更复杂的:
setTimeout(function(){
console.log(1);
setTimeout(function(){console.log(3);},0);
},0);
console.log(2);
setTimeout(function(){
console.log(4);
setTimeout(function(){console.log(5);},0);
},0);
结果是 2 1 4 3 5
怎么解释呢:
console.log 是在主任务栈中执行的,而setTimeout 则是先在任务队列中排队的.
等主任务栈执行完毕了,才会按照任务队列去执行任务队列的任务.
上面setTimeout 排队会先排 1 4 然后排 3 5.所以 执行了 2 14 35.
这个也是javascript 被用于nodejs 的一个核心特性.
浏览器Event Loop 是个什么鬼