ECMA5Script執行環境和作用域
阿新 • • 發佈:2019-01-30
執行環境定義了當前變數或函式有權訪問的其他資料。每一個執行環境都有一個與之關聯的變數物件,環境中定義的所有變數和函式都儲存在這個物件中。雖然我們的程式碼無法訪問這個物件,但是解析器在處理資料時會在後臺執行它。
全域性執行環境是最外圍的一個執行環境(例如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();
//在當前執行環境中可以一層一層向上進行追溯,訪問它們的上級執行環境中的所有變數和函式