JavaScript事件队列、宏任务、微任务笔记。

367 阅读1分钟

1、事件队列

当Javascript遇到异步代码时,会将代码存入一个异步事件队列当中,等同步代码执行完毕,依此调用存入的异步代码,在调用异步代码的途中遇到了内嵌异步代码时,则再在事件队列尾部追加事件,直至事件调用完毕

2、宏任务

具有代表性的是setTimeout,事件队列种的普通异步代码是宏任务,在执行宏任务有2种前提条件:

  1. 同步代码执行完毕
  2. 微任务执行完毕

3、微任务

具有代表性的是Promise,也就是说事件执行顺序是:同步代码->微任务->宏任务


实例

setTimeout(_ => {
  console.log(2)
}, 0);
  
Promise.resolve().then(_ => console.log(3))

console.log(1)
  
new Promise(reject => {
  console.log(4)
  reject()
}).then(_ => {
  console.log(5)
})

// 1 4 3 5 2

 解析:

同步代码有:

console.log(1)
new Promise(reject => {
    console.log(4)
    rejcet()
})

异步代码

// 宏任务
setTimeout(_ => {  
  console.log(2)
}, 0);

// 微任务
Promise.resolve().then(_ => console.log(3))

.then(_ => {  
  console.log(5)
})

按照执行顺序依次输出 1、4、3、5、2