更新時間:2023年05月29日10時21分 來源:傳智教育 瀏覽次數(shù):
微任務(wù)和宏任務(wù)是在異步編程中經(jīng)常使用的概念,用于管理任務(wù)的執(zhí)行順序和優(yōu)先級。
微任務(wù)(Microtask)和宏任務(wù)(Macrotask)都是異步任務(wù),但它們之間存在一些關(guān)鍵的區(qū)別:
下面是一個簡單的JavaScript代碼演示,展示了微任務(wù)和宏任務(wù)的執(zhí)行順序:
console.log('1'); setTimeout(function() { console.log('2'); }, 0); Promise.resolve().then(function() { console.log('3'); }); console.log('4');
輸出結(jié)果為:
1 4 3 2
在這個示例中,首先打印了數(shù)字1和4,這是因為它們是同步任務(wù)。然后,微任務(wù)Promise的回調(diào)函數(shù)被添加到微任務(wù)隊列中。接下來,通過setTimeout函數(shù)創(chuàng)建的定時器被添加到宏任務(wù)隊列中。當(dāng)JavaScript引擎處于空閑狀態(tài)時,它會先執(zhí)行微任務(wù)隊列中的任務(wù),然后再執(zhí)行宏任務(wù)隊列中的任務(wù)。
所以,數(shù)字3首先被打印,這是因為微任務(wù)具有更高的優(yōu)先級,它會在當(dāng)前任務(wù)完成后立即執(zhí)行。然后,數(shù)字2被打印,這是因為宏任務(wù)需要等待一段時間,直到JavaScript引擎空閑時才會執(zhí)行。
需要注意的是,微任務(wù)和宏任務(wù)的執(zhí)行順序可能會因瀏覽器和JavaScript引擎的實現(xiàn)而有所不同。上述示例只是一種可能的執(zhí)行順序,不同的環(huán)境下可能會有差異。