JS JavaScript事件迴圈機制

2021-09-11 09:52:13 字數 1397 閱讀 1773

首先區分程序和執行緒

瀏覽器的渲染程序是多執行緒的

gui渲染執行緒

js引擎執行緒

事件觸發執行緒

定時觸發器執行緒

非同步http請求執行緒

事件迴圈機制

上**釋:

巨集任務(macrotask)和微任務(microtask)

先看一段**的執行結果:

console.log('script start');

settimeout(function() , 0);

promise.resolve().then(function() ).then(function() );

console.log('script end');

複製**

執行結果: script start , script end , promise1 , promise2 , settimeout

js中分為兩種任務型別:macrotaskmicrotask,在ecmascript中,microtask稱為jobsmacrotask可稱為task

每乙個task會從頭到尾將這個任務執行完畢,不會執行其它

瀏覽器為了能夠使得js內部taskdom任務能夠有序的執行,會在乙個task執行結束後,在下乙個task執行開始前,對頁面進行重新渲染 (task->渲染->task->...)

也就是說,在當前task任務後,下乙個task之前,在渲染之前

所以它的響應速度相比settimeoutsettimeouttask)會更快,因為無需等渲染

也就是說,在某乙個macrotask執行完後,就會將在它執行期間產生的所有microtask都執行完畢(在渲染前)

分別什麼樣的場景會形成macrotask和microtask呢?

補充:在node環境下,process.nexttick的優先順序高於promise,也就是可以簡單理解為:在巨集任務結束後會先執行微任務佇列中的nexttickqueue部分,然後才會執行微任務中的promise部分。

總結下執行機制:

如圖:

JS JavaScript 學習筆記

1.1 變數 var 用於定義變數 例如 var a 等號用於給變數賦值 需要先定義變數 a 1 上面的內容可以簡寫為 var a 1 1.2 輸出內容 console.log 用於輸出內容 例如 console.log 我的身份是程式猿 輸出變數 console.log a 1.3 字串 var ...

9章 表單 js javaScript寶典

9.1 form物件 form物件 document.forms 0 使用元素名稱的字串作為陣列下標 document.forms formname 注意 陣列引用單詞的複數形式 另外可以使用表單名 document.formname 9.1訪問表單屬性 document.forms 0 actio...

js JavaScript高階程式設計學習筆記15

第十七章 錯誤處理與除錯 1 try catch語句。如果try塊中的任何 發生了錯誤,就會立即退出執行開始執行catch塊。必須要給catch的錯誤物件起名字。不同瀏覽器都有乙個message屬性儲存錯誤訊息。2 finally子句,在try catch塊後,無論如何都會執行finally子句的內...