•執行環境(executioncontext)是javascript中最爲重要的一個概念。執行環境定義了變量或函數有權訪問的其他數據,決定了它們各自的行爲。每一個執行環境都有一個與之關聯的變量對象,環境中定義的所有變量和函數都保存在這個對象中。雖然我們的代碼無法訪問這個對象,但是解析器在處理數據時會在後臺執行它。
•全局執行環境是最外圍的一個執行環境。根據ECMScript實現所在的宿主環境不同,表示執行環境的對象也不一樣。
•每一個函數都有自己的執行環境。當執行流進一個函數時,函數的環境就會被推入一個環境棧中。而在函數執行之後,棧將其環境彈出,把控制權返還給之前的執行環境。當代碼在一個環境中執行時,會創建變量對象的一個作用域鏈(scopechain)。作用域鏈的用途,是保證對執行環境有權訪問的所有變量和函數的有序訪問。
//1 執行環境 window對象(最上層的執行環境)
var color1 = "blue";
function changeColor(){ // 每一個函數 都有一個執行環境 (variable obj)
var color2 = "red";
function swapColor(){ // 這個函數 又產生了一個執行環境 (variable obj)
// c3 3級作用域 c2 2級作用域 c1 1級作用域
var color3 = color2;
color2 = color1;
color1 = color3;
//這裏可以訪問:color1、2、3
}
//這裏可以訪問color1、color2、但不能訪問color3
console.log(swapColor());
}
//這裏只能訪問color1
console.log(changeColor()); // 作用域 window 第一個作用環境
// 環境變量 可以一層一層的向上進行追溯 可以訪問它的上級 環境(變量和函數)
// 一層一層的像上追溯