關於JavaScript函數執行環境的過程,IBM developerworks文檔庫中的一段描述感覺很不錯,摘抄如下: “JavaScript 中的函數既可以被當作普通函數執行,也可以作為對象的方法執行,這是導致 this 含義如此豐富的主要原因。一個函數被執行時,會創建一個執行環境(Execut ...
關於JavaScript函數執行環境的過程,IBM developerworks文檔庫中的一段描述感覺很不錯,摘抄如下:
“JavaScript 中的函數既可以被當作普通函數執行,也可以作為對象的方法執行,這是導致 this 含義如此豐富的主要原因。一個函數被執行時,會創建一個執行環境(ExecutionContext),函數的所有的行為均發生在此執行環境中,構建該執行環境時,JavaScript 首先會創建 arguments
變數,其中包含調用函數時傳入的參數。接下來創建作用域鏈。然後初始化變數,首先初始化函數的形參表,值為 arguments
變數中對應的值,如果 arguments
變數中沒有對應值,則該形參初始化為 undefined
。如果該函數中含有內部函數,則初始化這些內部函數。如果沒有,繼續初始化該函數內定義的局部變數,需要註意的是此時這些變數初始化為 undefined
,其賦值操作在執行環境(ExecutionContext)創建成功後,函數執行時才會執行,這點對於我們理解 JavaScript 中的變數作用域非常重要,鑒於篇幅,我們先不在這裡討論這個話題。最後為 this
變數賦值,如前所述,會根據函數調用方式的不同,賦給 this
全局對象,當前對象等。至此函數的執行環境(ExecutionContext)創建成功,函數開始逐行執行,所需變數均從之前構建好的執行環境(ExecutionContext)中讀取。”