執行上下文與執行上下文棧 - js函式高階
阿新 • • 發佈:2021-07-31
程式碼分類
-
全域性程式碼
-
區域性程式碼
全域性執行上下文
-
在執行全域性程式碼前將window確定為全域性執行上下文(GO)
-
對全域性資料進行預編譯
-
var定義的全域性變數新增為window的屬性
-
function宣告的全域性函式新增為window的方法
-
this賦值window
- 開始執行程式碼
函式執行上下文
-
執行函式體前,建立對應函式執行上下文物件(AO)
-
對區域性資料進行預編譯
-
形參變數新增為執行上下文的屬性
-
arguments新增為執行上下文的屬性
-
var定義的區域性變數新增為執行下文的屬性
-
function宣告的函式新增為執行上下文的方法
-
this(呼叫函式的物件)
- 開始執行函式體程式碼
執行上下文只在函式執行前的一刻產生
執行上下文棧
-
在全域性程式碼執行前,js引擎會建立一個棧來儲存管理所有的執行上下文物件
-
待全域性執行上下文(window)確定後,將其新增到棧中(壓棧)
-
函式上下文建立後,將其新增入棧中(壓棧)
-
當前函式執行完後,將棧頂的物件移除(出棧)
-
所有程式碼執行完成後,棧中只存在window