1.js是單執行緒的
2.js的event loop 是js的執行機制
(1)js裡面的一種分類方式就是將**分為:同步**和非同步**
》1同步**:同步**就是從從開始到結束,遇到**就立即執行的就叫做同步**
》2非同步**:沒有立即執行,而是延遲了一會兒,或者說是滿足一定條件後才去執行的,這類**叫做非同步**【定時任務,網路請求(ajax請求,img的動態請求),事件繫結/dom事件,promise】。
*首先判斷js是同步的還是非同步的,同步就是進入主程序,非同步就是進入event table
*非同步任務在event table中註冊函式,當滿足觸發條件後,被推入event queue
*同步任務進入主程序後一直執行,直到主線程空閒的時候,才會去event queue中檢視是否有可執行的非同步任務,如果有的話就推入主程序裡面
上面的三個步驟迴圈執行,這就是event loop
下來看看你是真的了解了event loop了嗎?看看下面的**,思考一下吧!
console.log(1);
settimeout(function(),0);
console.log(3);
正確的答案是1 3 2
再來看一段**:
settimeout(function(),0);
new promise(function(resolve)).then(function());
console.log(4);
你的答案是不是:2 4 1 3
但是執行出來的結果卻是:2 4 3 1好氣呀!對不對!
事實勝於雄辯,事實證明上面的說法不夠規範,所以我們在一起看看規範的劃分方式
ps:我們還要注意的就是其中的對於settimeout來說的話即便你將其中的對應的時間設定為0,js還是會利用其中的預設4毫秒的。
(2)分為巨集任務和微任務
》巨集任務:包括整體**script,settimeout,setinterval
》微任務:promise,process,nexttick
按照這種分類,js的執行機制就是:
*將其中的巨集任務放在eventqueue裡面,**繼續向下檢查看有沒有微任務,如果有其中的微任務的話將其中的微任務放在微任務佇列裡面
*等到主線程程序的所有的**執行結束後,先執行微任務裡面的,等到微任務佇列空了之後才會去執行巨集任務佇列裡面的。
重複以上兩個步驟,結合(1)(2)裡面的內容就可以更加準確的了解js的執行機制了吧!【先執行同步的**,同步的執行完之後再去執行微任務裡面然後執行巨集任務】
相信在(1)中遺留的問題大家也都知道了吧!
JS 引擎的執行機制
首先需明白兩點 js是單執行緒語言js的 event loop是js 的執行機制。深入了解 js的執行,就等於深入了解 js裡的 event loop 1 js為什麼是單執行緒的?js最初被設計用在瀏覽器中,那麼想象一下,如果瀏覽器中的js是多執行緒的。場景描述 那麼現在有 2個程序,process...
JS引擎的執行機制
1.js是單執行緒語言 2.js的執行機制是event loop。一。單執行緒。非同步執行。js 單執行緒的非同步執行是通過事件迴圈 event loop event loop執行順序 1.首先判斷js同步還是非同步,同步進主程序,非同步進event table.2.非同步任務在event tabl...
JS執行機制
js是單執行緒的,settimeout和setinterval是非同步任務,要掛起,不先執行,等同步任務完成之後,再去處理非同步任務 console.log 1 settimeout function 0 console.log 3 console.log 4 輸出 1 3 4 2console.l...