首先區分程序和執行緒
瀏覽器的渲染程序是多執行緒的
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 , settimeoutjs中分為兩種任務型別:
macrotask
和microtask
,在ecmascript
中,microtask
稱為jobs
,macrotask
可稱為task
每乙個task
會從頭到尾將這個任務執行完畢,不會執行其它
瀏覽器為了能夠使得js
內部task
與dom
任務能夠有序的執行,會在乙個task
執行結束後,在下乙個task
執行開始前,對頁面進行重新渲染 (task
->渲染->task
->...)
也就是說,在當前task
任務後,下乙個task
之前,在渲染之前
所以它的響應速度相比settimeout
(settimeout
是task
)會更快,因為無需等渲染
也就是說,在某乙個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子句的內...