JavaScript Event Loop事件迴圈
阿新 • • 發佈:2021-06-17
JS是單執行緒的語言,它的非同步同步是通過Event Loop實現的,分為三個棧,呼叫棧、訊息佇列(巨集任務)、微任務。
js執行的時候呼叫DOM遇到第一個函式的時候會把函式壓入棧。
function fn2(){ console.log(2) } fn2()
fu2()會壓入棧 執行function fn2()輸出console.log(2)後棧彈出
var p = new Promise (resolve=>{ console.log(5) //5 resolve() }) p.then(function(){ console.log(3) //3 }) function fn2(){ console.log(2)
setTimeout(()=>{console.log(6)}) //6 } fn2()
遇到promise 會把new promise壓入棧中輸出5 再把resolve()壓入棧中,將p.then裡的console.log(3)匯入微任務中,執行fn2輸出2後把setTimeout壓入訊息佇列中,再執行微任務裡的console.log(3),微任務執行完畢後也就是輸出3後,在執行console.log(6),最後彈出。 這就是js單執行緒執行順序