首页 > 代码库 > 浏览器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 是个什么鬼