1. 程式人生 > >ECMA5Script執行環境和作用域

ECMA5Script執行環境和作用域

執行環境定義了當前變數或函式有權訪問的其他資料。每一個執行環境都有一個與之關聯的變數物件,環境中定義的所有變數和函式都儲存在這個物件中。雖然我們的程式碼無法訪問這個物件,但是解析器在處理資料時會在後臺執行它。
全域性執行環境是最外圍的一個執行環境(例如window)。根據ECMScript實現所在的宿主環境不同,表示執行環境的物件也不一樣。
每一個函式都有自己的執行環境。當執行流進一個函式時,函式的環境就會被推入一個環境棧中。而在函式執行之後,棧將其環境彈出,把控制權返還給之前的執行環境。當代碼在一個環境中執行時,會建立變數物件的一個作用域鏈。作用域鏈的用途,是保證對執行環境有權訪問的所有變數和函式的有序訪問。
概念看起來都很比安特愛……還是直接看例子比較直觀……

//1、執行環境為window物件(最上層的執行環境)  1級作用域
var color1 = "grey";
function showColor(){       //這個函式產生了一個執行環境  2級作用域
    var color2 = "blue";
    function myColor(){     //這個函式又產生了一個執行環境 3級作用域
        var color3 = color2;
        color2 = color1;
        color1 = color3;
        //該作用域下可訪問 color1 color2  color3 
    }
    //這裡可以訪問color1、color2,但是不能訪問color3
myColor(); } //這裡只能訪問color1 showColor(); //在當前執行環境中可以一層一層向上進行追溯,訪問它們的上級執行環境中的所有變數和函式