1,宏隊列:用來保存 待執行的宏任務(回調),
比如:定時器回調 、DOM事件回調、ajax回調
2,微隊列:用來保存待執行的微任務(回調),
比如:promise的回調、MutationObserve的回調
3,JS執行時會區別這 2個隊列
JS引擎首先必須先執行所有的初始化同步任務代碼
每次准備取出第一個宏任務執行前,都要將所有的微任務一個一個取出來執行
setTimeout(()=>{ //立即放入宏隊列
console.log('setTimeout1')
Promise.resolve(3).then(
value => { //立即放入微隊列
console.log('onResolved3()', value)
}
)
},0)
setTimeout(()=>{ //立即放入宏隊列
console.log('setTimeout2')
},0)
Promise.resolve(1).then(
value => { //立即放入微隊列
console.log('onResolved1()', value)
setTimeout(()=>{
console.log('setTimeout3', value)
},0)
}
)
Promise.resolve(2).then(
value => { //立即放入微隊列
console.log('onResolved2()', value)
}
)

setTimeout(() => {
console.log("0")
}, 0)
new Promise((resolve, reject) => {
console.log("1")
resolve()
}).then(() => {
console.log("2")
new Promise((resolve, reject) => {
console.log("3")
resolve()
}).then(() => {
console.log("4")
}).then(() => {
console.log("5")
})
}).then(() => {
console.log("6")
})
new Promise((resolve, reject) => {
console.log("7")
resolve()
}).then(() => {
console.log("8")
})
1 7 2 3 8 4 6 5 0
