Fork me on GitHub

js作用域链

js作用域链

首先介绍几个概念:
变量对象:执行环境定义的所有变量和函数都保存在这个对象中。
执行环境:执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。
作用域链:当代码在环境中执行,会创建变量对象的一个作用域链。作用是对执行环境有权访问的所有变量和函数的有序访问。

作用域链的前端,始终都是当前执行的代码所在环境的变量对象。如果这个环境是函数,则将其活动对象(activation object)作为变量对象。活动对象在最开始时只包含一个变量,即 arguments 对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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();

注意:1、内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数
2、环境之间的联系是线性、有次序的。每个环境都可以向上搜索作用域链,以查询变量和函数名

-------------本文结束感谢您的阅读-------------