參考:這篇文章的總結
因為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互動事件 ...