1、事件队列
当Javascript遇到异步代码时,会将代码存入一个异步事件队列当中,等同步代码执行完毕,依此调用存入的异步代码,在调用异步代码的途中遇到了内嵌异步代码时,则再在事件队列尾部追加事件,直至事件调用完毕
2、宏任务
具有代表性的是setTimeout,事件队列种的普通异步代码是宏任务,在执行宏任务有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