要搞懂這個問題,首先要了解事件循環(Event Loop)前端
JS運行時,對代碼執行順序的一個算法(任務調度算法)vue
JS 分類:同步任務和異步任務 JS 的執行機制:node
event loop 裏有維護兩個不一樣的異步任務隊列react
每次執行一段代碼(一個script標籤)都是一個 macroTask 執行流程:git
瀏覽器執行代碼的過程以下整個流程 github
那麼回到題目上去,就是面試
setTimeout(function(){
console.log(1); // 1-放入宏任務隊列,7-執行下一輪事件循環,宏任務輸出1
},0);
new Promise(function(resolve) {
console.log(2); // 2-同步輸出 2
for(let i=0; i<10000 ; i++ ) {
i==9999 && resolve();
}
console.log(3); // 4-同步輸出 3
}).then(function(){
console.log(4); // 3-放入微任務隊列,6-回到微任務隊列,執行剩餘的微任務,輸出4
});
console.log(5); // 5-同步輸出 5
複製代碼
做者:FunnyZ算法
經典前端面試題每日更新,歡迎參與討論,地址:github.com/daily-inter…。小程序
更多angular1/2/4/五、ionic1/2/三、react、vue、微信小程序、nodejs等技術文章、視頻教程和開源項目,請關注微信公衆號——全棧弄潮兒。微信小程序