1 /// 下面这段代码中,changeColor()的作用域链中包含两个对象:他自己变量对象(其中定义着arguments对象) 和全局环境的变量对象。在函数内部可以访问变量color就是因为可以再这个作用域链中找到它。
2 var color = "blue";
3 function changeColor(){
4 if (color === "blue"){
5 color = "red" 6 } else {
7 color = "blue" 8 }
9 }
10 changeColor();
11 alert("Color is now " + color); red
12
13 14 15 16 /以下代码共涉及 3 个执行环境:全局环境、changeColor()的局部环境和 swapColors()的局部环境。
17 2. 全局环境中有一个变量 color 和一个函数 changeColor()。
18 1. changeColor()的局部环境中有一个名为 anotherColor 的变量和一个名为 swapColors()的函数,但它也可以访问全局环境中的变量 color。
19 0. swapColors()的局部环境中有一个变量 tempColor,该变量只能在这个环境中访问到。无论全局环境还是 changeColor()的局部环境都无权访问 tempColor。然而,在 swapColors()内部则可以访问其他两个环境中的所有变量,因为那两个环境是它的父执行环境。
20 21 22 var anotherColor = "red"23 swapColors(){
24 var tempColor = anotherColor;
25 anotherColor = color;
26 color = tempColor;
27 这里可以访问 color、anotherColor 和 tempColor
28 29 这里可以访问 color 和 anotherColor,但不能访问 tempColor
30 swapColors();
31 32 这里只能访问 color
33 changeColor();