总结:
- JS中没有块级作用域,只有函数执行环境和全局执行环境window
- 没进入一个新环境就会创建一个用于搜索变量和函数的作用域链
- 局部环境可以访问其包含(父)环境,全局环境或父环境不能访问局部环境
执行环境(execution context):
- 定义了变量或函数有权访问的数据
- 每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的变量和函数都保存在这个对象中
- 包括函数执行环境和全局执行环境window
作用域链(scope chain):
- 对执行环境有权访问的所有变量和函数有序访问
- 作用域链前端为当前执行代码所在环境的变量,全局window是作用域链上的最后一个对象
- 沿着作用域链从前端开始一级一级往后回溯,直到找到标识符为止
- 若局部和父环境同名,则使用局部标识符
例子:
1.if语句中的声明的变量会添加到当前环境,如for (var i=0;i<10;i++){
doSomething();
}
alert(i); //10
2.标识符查询示例
var color = "blue";
function getColor1(){
return color;
}
function getColor2(){
var color = "red";
return color;
}
alert(getColor1()); //"blue"
alert(getColor2()); //"red"