Execution Context 執行環境

當JS引擎執行程式碼(script)時,便會創建 execution contexts(執行環境) 。 JavaScript 共會建立兩種執行環境:

  1. 全域執行環境 (Global Execution Context)
  2. 函式執行環境 (Function Execution Context)

每種 execution context 都包含兩個階段:創造階段 creation phase 和 執行階段 execution phase。

全域執行環境

當初次執行一份JavaScript程式碼時, JS引擎會創造第一種 execution context,叫 Global Execution Context。

在 Global Execution Context 內部,會先進入creation phase:

  1. 創建global object。 ( 例如,瀏覽器中的window object,或Node.js中的 global object。)
  2. 建立 scope。
  3. 創建 this 關鍵字,並被綁定至 global object。
  4. 將 variables 、class 和 function 分配至記憶體。 (hoisting步驟)

creation phase結束後,會進入execution phase:

  1. 逐行( line by line )執行程式碼。
  2. 遇到遞迴時,則使用call stack來排定工作順序。

解釋了為什麼可以在定義一個function之前,就先使用這個function。因為在creattion phase-1.4時,JS就已經定義了function。

解釋了為什麼可以在定義一個function之前,就先使用這個function。因為在creattion phase-1.4時,JS就已經定義了function。

函式執行環境

每次的 function call ,JS引擎也都會創造一個Function Execution Context。 函式執行環境與全域執行環境非常類似,一樣也有 creation phase 以及 execution phase,但差別在於,函式執行環境不創建global object,而是創建argument object。

Argument object包含了被放入此函式的parameters的數值參照值(a reference to all the parameters passed into the function)。

函式執行環境的creation phase是: