JS事件回圈機制總結
JS事件回圈設計的原因
(1)JS的特點:JavaScript語言最大的一個特點就是單執行緒,也就是說,同一時間只能做一件事情,(非阻塞),執行代碼的時候只有一個主執行緒來處理所有任務;
(2)單執行緒原因:JavaScript的單執行緒與它的用途有關,JavaScript作為瀏覽器腳本語言,JavaScript主要用途是與用戶互動,以及DOM操作(JavaScript對DOM節點的操作包括訪問,創建,添加,洗掉,替換,插入,復制,移動等),這就決定了JavaScript只能是單執行緒(如果是多執行緒的話,那么可能出現在同一時間對一個DOM中的節點進行不同的操作的話,就會出現問題,問題就會變得很復雜)—HTML5允許JavaScript腳本創建多個執行緒,但是子執行緒完全受主執行緒的控制;
(3)宿主環境:雖然JS是單執行緒的,但是JS的宿主環境是多執行緒的(瀏覽器下的js引擎為事件回圈機制JS提供了表達程式邏輯的語法和實作基本功能的API,瀏覽器是JS得到真實運行環境,又稱JS的宿主環境,JS宿主環境中的一個功能模塊:JS執行引擎,可以決議并執行JS),;
(4)瀏覽器執行緒:瀏覽器中含有的執行緒:

(5)行程和執行緒的概念:
行程:當一個應用程式運行時,需要使用記憶體和CPU資源,這些資源需要向作業系統申請,作業系統以行程的方式來分配這些資源,一個行程就代表著一塊獨立于其他行程的記憶體空間,一個應用程式要運行,必須至少有一個行程啟動,行程的最大特點是獨立,一個行程不能隨意的訪問其他行程的資源,這就保證了多個程式在作業系統上運行互不干擾,
執行緒:可能要同時執行多個任務,每個任務需要在一個執行緒上運行,執行緒與執行緒之間相對獨立,但可以共享應用程式的行程資料
JS事件回圈中術語概念
(1)普通的堆疊對立:當JavaScript代碼執行的時候會將不同的變數存于記憶體中的不同位置:
堆:堆里面存放著一些物件;
堆疊:堆疊里面存放一些基礎變數以及物件指標;
(2)執行堆疊:當我們在js中呼叫一個方法的時候,js會生成一個與這個方法對應的執行環境(context),又叫執行背景關系,這個執行環境中,存有這個方法的私有作用域,上層作用域的指向,方法的引數,以及這個作用域的this物件,又因為js是單執行緒的,同一個時間只能執行一個方法,所以所有的方法被安排在一個單獨的地方,等待被呼叫;
(3)任務佇列:事件佇列在不同的宿主環境中有所差異,大部分宿主環境會將事件佇列進行細分,在瀏覽器中,事件佇列分為兩種:宏任務(佇列)macroTask:計時器結束的回呼、事件回呼、http回呼等等絕大部分異步函式進入宏佇列 ;微任務(佇列)microTask:Promise的回呼, MutationObserver(用于監聽某個DOM物件的變化)當執行堆疊清空時,JS引擎首先會將微任務中的所有任務依次執行結束,如果沒有微任務,則執行宏任務;
(4)宏任務和微任務:
JS事件回圈的實作細節
(1)事件回圈:
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/35229.html
標籤:JavaScript
下一篇:你必須要知道的babel二三事
