概念
1. 宏任務:當前調用棧中執行的代碼成為宏任務。(主代碼快,定時器等等)。
2.微任務: 當前(此次事件循環中)宏任務執行完,在下一個宏任務開始之前需要執行的任務,可以理解為回調事件。(promise.then,proness.nextTick等等)。 3. 宏任務中的事件放在callback queue中,由事件觸發線程維護;微任務的事件放在微任務隊列中,由js引擎線程維護。
運行機制
1. 在執行棧中執行一個宏任務。
2. 執行過程中遇到微任務,將微任務添加到微任務隊列中。
3. 當前宏任務執行完畢,立即執行微任務隊列中的任務。
4. 當前微任務隊列中的任務執行完畢,檢查渲染,GUI線程接管渲染。
5. 渲染完畢后,js線程接管,開啟下一次事件循環,執行下一次宏任務(事件隊列中取)。
微任務:process.nextTick、MutationObserver、Promise.then catch finally
宏任務:I/O、setTimeout、setInterval、setImmediate、requestAnimationFrame