执行环境
执行环境定义了变量或函数有权访问的其他数据(可把执行环境看作对象,含有属性和函数),决定了她们各自的行为。
执行环境有全局执行环境和局部执行环境,每个函数都有自己的执行环境(局部执行环境),window对象的执行环境是全局执行环境
例如,这个例子中共有三个执行环境,全局执行环境,函数A,B的局部执行环境
var color="pink";
function A(){
var a="blue"
function B(){
var b="white"
}
作用域
当代码在执行环境中执行时,创建了一个作用域链,创建的的目的是为了保证对其他执行环境的数据有序访问,将上边的例子变形
var color="pink";
function A(){
var a=color; //pink
var anothercolor="yellow";
function B(){
var b=anothercolor; //yellow,代码1
var bb="red";
}
B();
//这里不能访问b,和bb;
}
A();
这个例子中,加入我们在执行代码1,那么函数B的执行环境就在作用域链的前端,作用域链的下一个对象就是包含环境函数B,作用域链的最后一个对象就是全局执行环境(window),作用域最前端的可以访问作用域后边执行环境的变量和函数,反之不可,也就是内部环境可以通过作用域链访问外部环境。但是外部环境不能访问内部环境.
**
js没有块级作用域
if(true){
var a="green"
}
alert(a); //green,代码1
这个例子放在c语言中变量a会在if语句执行完被销毁,因为变量会在自己的块级作用域内有效,而js没有块级作用域,它的变量会被添加到当前执行环境中(全局执行环境),全局执行环境是当浏览器窗口关闭才会被销毁,所以才有了上边的结果