JavaScript宏觀任務和微觀任務

在ES3 或者 更早的版本中,JavaScript並無異步操作,所以代碼給到JavaScript引擎,它就直接順次的執行,這個任務是宿主發起的任務我們可以稱之爲宏觀任務(macrotask)。

在ES5 或者 之後的版本,JavaScript出現了Promise,這就不需要瀏覽器的安排,引擎自己也可以發起任務,這個任務就叫做微觀任務(microtask)

  • 下面是自我總結,太標準的語言說起來太難理解,我們通俗一點唄。

宏觀任務

需要JavaScript引擎來執行的
包括整體script代碼,setInterval,setTimeout等事件

微觀任務

需要JavaScript引擎來執行的
promise ,process.nexttrick(nodejs的內容)

代碼體現

 setTimeout(() => {
   console.log(1);

   process.nexttrick( () => console.log(5))

},0);

new Promise((resovle,reject) => {
   console.log(2);

   resovle();

}).then(() => console.log(3))

   console.log(4);
})

//執行結果執行順序就是2,4,3,1,5

接下來我們看一下上面那張圖解來解答吧!

首先我們找到宏任務,也就是整體代碼,定時器等。那麼開始執行整體代碼,執行promise中的整體代碼輸出2,然後就是輸出4,這時所有的整體代碼已執行完畢,繼續查找當前已執行的代碼中是否包含微任務,我們可以知道promise.then是微任務那麼就是執行輸出3,接着查找其他的宏任務那就是setTimeout輸出1,再輸出微任務5啦。
所以執行順序就是2,4,3,1,5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章