簡單理解Javascript執行機制 簡單理解Javascript執行機制
簡單理解Javascript執行機制
JS是單執行緒
JavaScript語言的一大特點就是單執行緒,也就是說,同一個時間只能做一件事。這是因為Javascript這門指令碼語言誕生的使命所致一JavaScript 是為處理頁面中使用者的互動,以及操作DOM而誕生的。比如我們對某個DOM元素進行新增和刪除操作,不能同時進行。應該先進行新增,之後再刪除。
單執行緒就意味著,所有任務需要排隊,前一個任務結束,才會執行後一個任務。
這樣所導致的問題是:如果JS執行的時間過長,這樣就會造成頁面的渲染不連貫,導致頁面渲染載入阻塞的感覺。
同步和非同步
為了解決這個問題,利用多核CPU的計算能力, HTML5提出Web Worker標準,允許JavaScript指令碼建立多個執行緒。於是, JS中出現了同步
同步
前一個任務結束後再執行後一個任務,程式的執行順序與任務的排列順序是一致的,同步的。
非同步
可以簡單地理解為,做某件事的同時,還可以去處理其他的事情
JS執行機制
-
先執行執行棧中的同步任務
-
非同步任務(回撥函式)放入任務佇列中
-
一旦執行棧中的所有同步任務執行完畢,系統就會按次序讀取任務佇列中的非同步任務,於是被讀取的非同步任務結束等待狀態,進入執行棧,開始執行。
什麼是事件迴圈(event-loop)
主執行緒從"任務佇列"中讀取事件,這個過程是迴圈不斷的,所以整個的這種執行機制又稱為Event Loop(事件迴圈)。
JS是單執行緒
JavaScript語言的一大特點就是單執行緒
單執行緒就意味著,所有任務需要排隊,前一個任務結束,才會執行後一個任務。
這樣所導致的問題是:如果JS執行的時間過長,這樣就會造成頁面的渲染不連貫,導致頁面渲染載入阻塞的感覺。
同步和非同步
為了解決這個問題,利用多核CPU的計算能力, HTML5提出Web Worker標準,允許JavaScript指令碼建立多個執行緒。於是, JS中出現了同步
同步
前一個任務結束後再執行後一個任務,程式的執行順序與任務的排列順序是一致的,同步的。
非同步
可以簡單地理解為,做某件事的同時,還可以去處理其他的事情
JS執行機制
-
先執行執行棧中的同步任務
-
非同步任務(回撥函式)放入任務佇列中
-
一旦執行棧中的所有同步任務執行完畢,系統就會按次序讀取任務佇列中的非同步任務,於是被讀取的非同步任務結束等待狀態,進入執行棧,開始執行。
什麼是事件迴圈(event-loop)
主執行緒從"任務佇列"中讀取事件,這個過程是迴圈不斷的,所以整個的這種執行機制又稱為Event Loop(事件迴圈)。