Event Loop: Microtask & Macrotask
Macrotask:
- 就是前面所說的Event Queue也稱為Task Queue,Web API具有非同步行為都放在Macrotask裡
Microtask:
- 通常為Promise產生,Promise裡用的then , catch 兩個方法會以非同步執行,當Promise被解析完成,狀態不是pending時,catch, then 就會被送去 Microtask Queue 或稱為 Job Queue
順序:
MicroTask Queue會在每個Macrotask結束後被運行,運行MicroTask時,會把MicroTask Queue裡所有MicroTask清空,才執行其他Macrotask
- 所有的 Queue 都會等待執行環境堆疊被清空,alert 肯定會先執行
- setTimeout 對應的函式會被當作一個 Macrotask ,等待時間到之後被送入 Macrotask Queue
- Promise 對應的 .then 或 .catch 的函式會被當作一個 Microtask 送入 Microtask Queue
- 在執行環境堆疊清空之後,通常網頁會先做一次 Render,Render 的動作同時也算是一個 Macrotask

- 對於瀏覽器來說,在網頁頁面開啟時,載入對應的 JS 檔並且執行這件事情,也是一個 Macrotask,所以執行完alert,會執行promise的Microtask,再執行timeout 的 Macrotask
