簡(jiǎn)單來(lái)說(shuō)瀏覽器主要執(zhí)行循序:
1. 所有同步腳本 -> 2. microtask queue微隊(duì)列里所有事件 -> 3. macrotask queue宏隊(duì)列隊(duì)首事件 -> 1...
備注:在步驟2或3中產(chǎn)生的microtask微任務(wù)會(huì)繼續(xù)加入到microtask queue微隊(duì)列的隊(duì)尾。
那什么是microtask,什么是macrotask呢?
microtask:
- Promise
- process.nextTick (Node獨(dú)有)
- Object.observe
- MutationObserver
macrotask:
- setTimeout
- setInterval
- setImmediate (Node獨(dú)有)
- requestAnimationFrame (瀏覽器獨(dú)有)
- I/O
- UI rendering (瀏覽器獨(dú)有)
舉個(gè)例子:
setTimeout(() => {
console.log(3)
Promise.resolve().then(() => {
console.log(2)
});
});
console.log(1);
new Promise((resolve, reject) => {
console.log(4)
resolve(5)
}).then((data) => {
console.log(data);
})
setTimeout(() => {
console.log(6);
})
console.log(7);
請(qǐng)?jiān)谠u(píng)論里留下你的答案吧~