面試 JS執行機制

2021-09-24 07:43:39 字數 1456 閱讀 7244

參考:這篇文章的總結

因為js有同步任務和非同步任務,就造成了js多執行緒的假象,但是js是一門單執行緒語言

js的執行機制是根據事件迴圈的順序。

因為js有同步任務和非同步任務,為了了解執行機制,將任務細分為巨集任務和微任務。

巨集任務和微任務還包括其他的,這裡不贅述

事件迴圈的順序就是:

進入整體**(巨集任務)後,開始第一次迴圈。

接著執行所有的微任務

然後再次從巨集任務開始,找到其中乙個任務佇列執行完畢

再執行所有的微任務

第一次進入整體**時,就將立即執行的執行了,有巨集任務就放入巨集任務佇列,有微任務放入微任務佇列。

此時有沒執行的巨集任務和微任務,但是因為剛剛執行了巨集任務(整體**),所以這次迴圈要執行微任務,並且每次執行微任務都要執行所有的微任務

執行完這次所有的微任務,就迴圈去執行巨集任務。記住除了第一次,以後再執行巨集任務都只執行乙個巨集任務

如果又有微任務,就再去迴圈執行所有的微任務……再去迴圈執行乙個巨集任務……執行所有的微任務……執行乙個巨集任務……

舉乙個小例子

settimeout(function() );

newpromise(function(resolve) ).then(function() );

console.log('console');

複製**

promise

console

then

settimeout

複製**

第一次迴圈整體**(巨集任務),new promise立即執行,輸出promise

console.log('console')也立即執行,輸出console

這次迴圈後巨集任務佇列有:settimeout

微任務佇列有:promise的.then

第二次迴圈要執行所有的微任務了,即promise的.then,輸出then

第三次迴圈要執行乙個巨集任務了,即settimeout,輸出settimeout

只要記住

迴圈執行所有的巨集任務……執行乙個微任務……所有的巨集任務……乙個微任務

第一次迴圈執行的整體**屬於巨集任務

JS執行機制

js是單執行緒的,settimeout和setinterval是非同步任務,要掛起,不先執行,等同步任務完成之後,再去處理非同步任務 console.log 1 settimeout function 0 console.log 3 console.log 4 輸出 1 3 4 2console.l...

JS執行機制

輸出結果為 1,2,3 js是從上到下執行的 js是單執行緒的,即在同一時間只能做一件事情 遇到同步程式,直接執行 遇到非同步程式,先掛起,等同步程式執行完畢後再執行 同步佇列 優先順序最高 非同步佇列 遇到非同步佇列先掛起,等同步佇列執行完後,再選擇執行非同步佇列的某個 settimeout中的時...

JS執行機制

js單執行緒 在同一時間js只能做一件事。為什麼是單執行緒?如果多執行緒,同時操作乙個dom會出問題。非阻塞 event loop 事件迴圈 任務佇列 同步任務佇列要優先於非同步任務佇列處理。非同步任務被分為巨集任務和微任務。常見的非同步任務分類如下 巨集任務 定時器系列,dom事件 ui互動事件 ...