/*
* 宏任務
* 分類: setTimeout setInterval requrestAnimationFrame
* 1. 宏任務所處的隊列就是宏任務隊列
* 2. 第一個宏任務隊列中只有一個任務: 執行主線程的js代碼
* 3. 宏任務隊列可以有多個
* 4. 當宏任務隊列的中的任務全部執行完以后會查看是否有微任務隊列如果有先執行微任務隊列中的所有任務,如果沒有就查看是否有宏任務隊列
*
* 微任務
* 分類: new Promise().then(回調) process.nextTick
* 1. 微任務所處的隊列就是微任務隊列
* 2. 只有一個微任務隊列
* 3. 在上一個宏任務隊列執行完畢后如果有微任務隊列就會執行微任務隊列中的所有任務
* */
console.log('----------------- start -----------------'); setTimeout(() => { console.log('setTimeout'); }, 0) new Promise((resolve, reject) =>{ for (var i = 0; i < 5; i++) { console.log(i); } resolve(); // 修改promise實例對象的狀態為成功的狀態 }).then(() => { console.log('promise實例成功回調執行'); }) console.log('----------------- end -----------------');
結果:
----------------- start -----------------
0
1
2
3
4
----------------- end -----------------
promise實例成功回調執行
setTimeout
異步執行順序是先執行微任務,再執行宏任務(宏任務是異步(宏任務里面也是先微任務再宏任務))
順序是: 先同步加一條異步的微任務
,再異步,加上 宏任務和微任務
同步從上之下執行
