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对象。
函数执行过程总共分两段:
进入执行上下文,这时候还没有执行代码,
- 函数的所有形参
- 根据形参在变量对象上创建新的属性,名称为形参,值为实参。
- 如果没有实参,值为undefined。
- 函数声明
- 根据函数声明在变量对象上创建新的属性,名称为函数名,值为函数对象。
- 如果已存在同名的属性,则完全替换它。
- 变量声明
- 根据变量声明在变量对象上创建新的属性,名称为变量名,值为undefined。
- 如果名称和函数或形式参数的名称相同, 则变量声明不会干扰已经存在的这类属性。
代码执行
- 按顺序执行代码,修改变量对象属性的值。