宏任务:setTimeout \ setInterval \ requestAnimationFrame 等
宿主环境内所有的内建或自定义的变量/函数都是 global/window 这个全局对象的属性/方法,而由宿主环境提供的也叫宏任务。
微任务:Promise \ queueMicortask \ MutationObserver
执行优先级:主线任务 > 微任务 > 微任务里的微任务 > 宏任务
// index.js
console.log(1) // 主线任务
setTimeout(() => { // 宏任务
console.log(5)
}, 0)
Promise.resolve().then(() => { // 微任务
console.log(3)
queueMicrotask(() => { // promise里面不可以放queueMicrotask 会报错
/* 微任务中将运行的代码 */
console.log('3-1')
});
}).then(() => {
console.log(4) // 微任务里面的微任务
})
console.log(2) // 主线任务
function testFn (){
console.log('a') // 主线任务
setTimeout(() => { // 宏任务
console.log('f')
}, 0)
const b = Promise.resolve().then(() => { // 微任务
console.log('c')
Promise.resolve().then(() => { // 微任务插队当前微任务
console.log('c1')
})
}).then(() => {
console.log('d') // 微任务里面的微任务
})
console.log('b')// 主线任务
return 'e' // 完成了微任务后才执行
}
testFn();
// 1、2、a、b、3、c、4、c1、d、e、5、f