1、引子
題目:
console.log(1);
setTimeout(function(){
console.log(3);
},0);
console.log(2);
輸出結果:1 2 3
2、JS是單線程的
單線程:同一個時間只能做一件事
3、任務隊列(消息隊列)
同步任務:在主線程上排隊執行的任務,只有前一個任務執行完畢,才能執行後一個任務;
異步任務:不進入主線程、而進入"任務隊列"(task queue)的任務,只有"任務隊列"通知主線程,某個異步任務可以執行了,該任務纔會進入主線程執行。
4、任務分類:
宏任務:包括整體代碼script,setTimeout,setInterval
微任務:Promise,process.nextTick
5、執行流程圖
事件循環,宏任務,微任務的關係如圖:
7、參考文章:
https://juejin.im/post/59e85eebf265da430d571f89