1. 程式人生 > 其它 >執行上下文與執行上下文棧 - js函式高階

執行上下文與執行上下文棧 - js函式高階

程式碼分類

  • 全域性程式碼

  • 區域性程式碼

全域性執行上下文

  1. 在執行全域性程式碼前將window確定為全域性執行上下文(GO)

  2. 對全域性資料進行預編譯

  • var定義的全域性變數新增為window的屬性

  • function宣告的全域性函式新增為window的方法

  • this賦值window

  1. 開始執行程式碼

函式執行上下文

  1. 執行函式體前,建立對應函式執行上下文物件(AO)

  2. 對區域性資料進行預編譯

  • 形參變數新增為執行上下文的屬性

  • arguments新增為執行上下文的屬性

  • var定義的區域性變數新增為執行下文的屬性

  • function宣告的函式新增為執行上下文的方法

  • this(呼叫函式的物件)

  1. 開始執行函式體程式碼

執行上下文只在函式執行前的一刻產生

執行上下文棧

  • 在全域性程式碼執行前,js引擎會建立一個棧來儲存管理所有的執行上下文物件

  • 待全域性執行上下文(window)確定後,將其新增到棧中(壓棧)

  • 函式上下文建立後,將其新增入棧中(壓棧)

  • 當前函式執行完後,將棧頂的物件移除(出棧)

  • 所有程式碼執行完成後,棧中只存在window