1. 程式人生 > >JavaScript執行環境& 作用域

JavaScript執行環境& 作用域

js 執行環境& 作用域

執行環境

執行環境定義了變數或函式有權訪問的其他資料,決定了它們各自的行為。每個執行環境都有一個對應的變數物件,環境中定義的所有變數和函式都儲存在這個物件中,雖然我們編寫的程式碼無法訪問這個物件,但是解析器在處理資料時會用到。

全域性執行環境是最外圍的一個執行環境,通常為 window 物件。某個執行環境中的所有程式碼執行完畢之後,該環境被銷燬,儲存在其中的變數和函式也隨之銷燬;全域性執行環境直到應用程式退出,例如關閉網頁或瀏覽器時才會被銷燬。

每個函式都有自己的執行環境。當執行流進入一個函式時,函式的環境就會被推入一個環境棧中。 而在函式執行之後,棧將其環境彈出,把控制權返回給之前的執行環境。ECMAScript 程式中的執行流 正是由這個方便的機制控制著。

作用域

當代碼在一個環境中執行時,會建立變數物件的一個作用域鏈。作用域鏈的用途事保證對執行環境有權訪問的所有變數和函式的有序訪問。作用域鏈的前端,都是當前執行的程式碼所在的環境的變數物件。

如果這個環境是函式,則將其活動物件作為變數物件。活動物件最開始只包含一個變數,即 arguments 物件。作用域鏈中的下一個變數物件來自包含(外部)環境,在下一個變數物件來自下一個包含環境,直至全域性執行環境。全域性執行環境的變數物件始終都是作用域鏈的最後一個變數物件。

識別符號解析是沿著作用域鏈一級一級搜尋識別符號的過程。搜尋過程始終從作用域鏈的前端開始,然後逐級向後,直至找到識別符號為止。