执行环境及作用域
执行环境
定义了变量或函数有权访问的其他数据,决定了它们各自的行为。简单来说,就是决定了一个变量或函数能够访问到的其他变量或函数有哪些。
每个执行函数都有一个变量对象,环境中定义的所有变量和函数都保存在这个对象中。
每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被push进一个 环境栈,执行完后再弹出。
作用域
作用域链:保证对执行环境有权访问的所有变量和函数的有权访问。简单理解,就是类似一个链表将当前访问的变量或函数和与之关联能够访问的执行环境串起来,当需要寻找当前环境之外的变量或函数时通过作用域链一环一环去查找。
注意:作用域链的前端指向自身的变量对象,后端指向外部环境。即:当调用一个执行环境中的变量时,首先去该环境的自身查找该变量,没有的话再去查找该环境的父一级。
//全局环境只能访问color、changeColor()
var color = 'blue';
//changeColor()不能访问swapColors()中的变量和函数
function changeColor(){
var anotherColor = 'red';
//swapColors()能够访问该代码片段的所有变量和函数
function swapColors(){
var tempColor = anotherColor;
anotherColor = color;
color = tempColor;
}
swapColors();
}
changeColor();