4. 变量对象 - cw84973570/Learning-notes GitHub Wiki

https://github.com/mqyqingfeng/Blog/issues/5

https://www.cnblogs.com/TomXu/archive/2012/01/16/2309728.html

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

全局上下文的变量对象就是全局对象,在客户端中即Window对象。

函数的变量对象在进入函数执行上下文时激活成活动对象,只有在这时才能被访问。

在函数执行上下文中,VO是不能直接访问的,此时由活动对象(activation object, 缩写为AO)扮演VO的角色。

即:

VO(functionContext) === AO;

活动对象是在进入函数上下文时刻被创建的,它通过函数的arguments属性初始化。arguments属性的值时arguments对象。

函数执行过程总共分两段:

进入执行上下文,这时候还没有执行代码,

  1. 函数的所有形参
    • 根据形参在变量对象上创建新的属性,名称为形参,值为实参。
    • 如果没有实参,值为undefined。
  2. 函数声明
    • 根据函数声明在变量对象上创建新的属性,名称为函数名,值为函数对象。
    • 如果已存在同名的属性,则完全替换它。
  3. 变量声明
    • 根据变量声明在变量对象上创建新的属性,名称为变量名,值为undefined。
    • 如果名称和函数或形式参数的名称相同, 则变量声明不会干扰已经存在的这类属性。

代码执行

  • 按顺序执行代码,修改变量对象属性的值。