關於js引擎的執行機制

2021-08-15 02:58:48 字數 1317 閱讀 3509

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...