1. 程式人生 > 其它 >JavaScript單執行緒,微任務,巨集任務

JavaScript單執行緒,微任務,巨集任務

技術標籤:javascript

文章目錄

一、JavaScript的單執行緒

從一誕生,JavaScript 就是單執行緒,這已經成了這門語言的核心特徵,將來也不會改變。
為了利用多核 CPU 的計算能力,HTML5 提出 Web Worker 標準,允許 JavaScript 指令碼建立多個執行緒,但是子執行緒完全受主執行緒控制,且不得操作 DOM。所以,這個新標準並沒有改變 JavaScript 單執行緒的本質。

二、微任務,巨集任務

因為js是單執行緒,所以在js執行的時候程式碼從上往下執行,先執行同步程式碼,在同步程式碼執行完畢之後,執行非同步程式碼,

任務執行

在這裡插入圖片描述

setTimeout(() => {
    //執行後 回撥一個巨集事件
    console.log('內層巨集事件3')
}, 0)
console.log('外層巨集事件1');

new Promise((resolve) => {
    console.log('外層巨集事件2');
    resolve()
}).then(() => {
    console.log('微事件1');
}).then(()=>{
    console.log('微事件2')
})
// 結果為
// 外層巨集事件1
// 外層巨集事件2
// 微事件1
// 微事件2
// 內層巨集事件3

執行順序
首先瀏覽器開始解析js程式碼從上之下,先執行同步,遇到非同步之後分發到供任務和微任務
在同步執行完畢後,先執行微任務,然後執行巨集任務
在執行微任務或者巨集任務中發生巢狀時,首先先執行其中的同步程式碼,然後在執行微任務,在微任務執行完畢後,先暫時不執行其中 的巨集任務,先執行與當前任務統計的微任務或者巨集任務,然後在全部執行完畢後,在折回去執行剛才巢狀的巨集任務。
setTimeout在執行的時候是所有延時器一起進行,哪個時間短執行哪個
微任務
在這裡插入圖片描述

巨集任務
在這裡插入圖片描述