當JS引擎執行程式碼(script)時,便會創建 execution contexts(執行環境) 。 JavaScript 共會建立兩種執行環境:
每種 execution context 都包含兩個階段:創造階段 creation phase 和 執行階段 execution phase。
當初次執行一份JavaScript程式碼時, JS引擎會創造第一種 execution context,叫 Global Execution Context。
在 Global Execution Context 內部,會先進入creation phase:
creation phase結束後,會進入execution phase:
解釋了為什麼可以在定義一個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是: