一。js中的执行环境
概念:执行环境是js中最重要的一个概念。它定义了变量或函数有权访问其他的数据,决定了各自的行为。每个执行环境中都有一个与之有关的变量对象,变量对象中包含了执行环境中定义的所有变量和函数。
类型:全局和局部。根据ECMAScript实现所在的宿主环境不同,执行环境的对象也不同。web浏览器中window对象是全局执行环境。全局变量和函数都是作为window对象的属性和方法创建的。某个环境中所有代码执行后,该环境就会销毁,其里面所有定义的变量和函数定义也销毁(全局执行环境直到退出应用程序才会销毁)。
执行环境的顺序:每个函数都有自己的执行环境。当执行流进入一个函数,函数的环境就会被推入一个环境栈中。当函数执行完后,栈将其弹出。把控制权还给之前的执行环境。
二。作用域
概念:代码执行时会产生一个作用域。是为了限制变量在程序中得使用范围。分为全局作用域,函数作用域,模块作用域。
三。作用域链
概念:代码在执行环境中执行时会创建变量得一个作用域链。
作用:保证当前执行环境有权访问的所有变量和函数的有序访问。例如当前是执行环境是函数,则最开始作用域链包含得是argument对象,下一个变量对象来自紧邻得外一层环境,再下一个来自再外一层得环境,直至搜寻到全局执行环境。这样就构成了一个作用域链。
执行环境中,访问的变量顺序是:一层一层往上一级寻找。
var color = "blue";
function changeColor(){
var anotherColor = "red";
function swapColors(){
var tempColor = anotherColor; anotherColor = color;
color = tempColor;
// 这里可以访问color、anotherColor和tempColor }
// 这里可以访问color和anotherColor,但不能访问tempColor
swapColors();
}
// 这里只能访问color changeColor();