首先看下列**的執行結果
console.log(1)
process.nexttick(function
())settimeout(function
())})
promise.resolve().then(function
() ).then(function
() );複製**
同步任務、微任務、巨集任務的執行優先順序如下:
同步任務 > 微任務 > 巨集任務複製**
#瀏覽器
node
i/o
✅
✅settimeout
✅
✅setinterval
✅
✅setimmediate
❌
✅requestanimationframe
✅❌#
瀏覽器node
process.nexttick
❌
✅mutationobserver
✅
❌promise.then catch finally
✅
✅ 回到題裡面
1、第一行是同步任務,優先順序最高,所以第一次輸出1
2、後面有nexttick,是微任務,有promise是微任務,settimeout是巨集任務,所以settimeouut裡的**最後執行
3、那就先依次執行微任務nexttick列印了2
4、接著執行另乙個微任務promise,列印了5,6
5、接著執行巨集任務settimeout,列印3
6、settimeout裡面有乙個微任務,然後執行它,列印4複製**
// 所以結果就是12
5634
複製**
非同步解決之Generator
generator 1 生成方式 function fn1 fn1.next 使用傳遞引數 fn1.next name qiang 這個引數上傳給上乙個yiel關鍵字的返回值。實戰!function initdata let gen initdata gen.next value.then res ...
JS非同步之巨集佇列與微佇列
js 中用來儲存待執行 函式的佇列包含 2 個不同特定的列隊 js 執行時會區別這 2 個佇列 下面這個例子可以看出promise要先於settimeout執行 settimeout 0 settimeout 0 promise.resolve 1 then value 0 promise.reso...
輝太郎看前端 js非同步巨集任務和微任務
前言巨集任務 settimeout,setinterval,ajax,dom事件 微任務 promise,async await。優先順序 微任務執行要比巨集任務要早。注 同步任務會和微任務按照出場順序先後執行,最後執行巨集任務。同步和非同步console.log 123 alert 阻塞 cons...