- 微任务执行时机比宏任务早
- 宏任务:script(整体代码)、 setTimeout、 setInterval、setImmediate、 DOM事件、AJAX请求
- 每一个宏任务都单独关联了一个微任务队列
- 微任务:Promise.then、.catch、.finally、process.nextTick、Object.observe、MutationObserver
- 优先级:同步>>>process.nextTick>>>微任务>>>宏任务>>>setTmmediate
微任务、宏任务都可以操作异步,那微任务要解决怎样的问题
主线程任务过多的时候,异步回调等待时间可能会过长,微任务可以在实时性和效率之间做一个有效权衡。
// 主线程任务
console.log(1)
// 异步任务——宏任务
setTimeout(() => {
console.log(2)
}, 0)
// 异步——主线程任务
new Promise((resolve) => {
resolve()
console.log(3)
})
// 异步——微任务
Promise.resolve().then(() => {
console.log(4)
})
// 主线程任务
console.log(5)
打印结果: 1,3,5,4,2
宏任务和微任务都是怎样执行的
- 执行宏任务script,
- 进入script后,所有的同步任务主线程执行
- 所有宏任务放入宏任务执行队列
- 所有微任务放入微任务执行队列
- 先清空微任务队列,
- 再取一个宏任务,执行,再清空微任务队列
- 依次循环