Skip to main content

作用域

变量对象

变量对象是与执行上下文相关的数据作用域,存储了在上下文中定义的 变量函数声明

全局执行上下文

全局执行上下文中的变量对象就是全局对象

函数执行上下文

函数执行上下文中,使用活动对象(Activation Object,AO) 来表示变量对象。

活动对象变量对象其实是同一个东西,活动对象是在进入函数执行上下文时刻被创建的。

活动对象使用函数的 arguments 属性初始化。arguments 属性值是 Arguments 对象

执行步骤

var color = "blue";

const changeColor = () => {
let anotherColor = "red";

const swapColors = () => {
let tempColor = anotherColor;
anotherColor = color;
color = tempColor;
// 这里可以访问 color、 anotherColor 和 tempColor
};

// 这里可以访问 color 和 anotherColor,但访问不到 tempColor
swapColors();
};

// 这里只能访问 color
changeColor();
  • 调用函数执行的时候,会创建变量对象作用域链
  • 这个作用域链决定各级上下文中的代码在访问变量函数的顺序。
  • 代码正在执行的上下文始终位于作用域链的最前端。
  • 代码执行时的变量函数等标识符的解析,是通过沿作用域链逐级搜索标识符名称完成的。
  • 搜索过程始终从作用域最前端开始,然后逐级往后,直到找到标识符。(如果没有标识符,通常会报错)

changeColor(作用域)

swapColors(作用域)