Js变量对象

当调用一个函数时,一个新的执行上下文就会被创建,而一个执行上下文的生命周期可以分为两个阶段。

创建阶段:在这个阶段中,执行上下文会分别创建变量对象,建立作用域链,以及确定this的指向。

代码执行阶段:在这个阶段会完成变量赋值,函数引用,以及执行其他代码。


Js变量对象_第1张图片
执行上下文生命周期

变量对象的创建过程:

1.建立arguments对象。检查当前上下文中的参数,建立该对象下的属性与属性值。

2.检查当前上下文的函数声明,也就是使用function关键字声明的函数。在变量对象中以函数名建立一个属性,属性值为指向该函数所在内存地址的引用。如果函数名的属性已经存在,那么该属性将会被新的引用所覆盖。

3.检查当前上下文中的变量声明,每找到一个变量声明,就在变量对象中以变量名建立一个属性,属性值为undefined。如果该变量名的属性已经存在,为了防止同名的函数被修改为undefined,则会直接跳过,原属性值不会被修改。


Js变量对象_第2张图片
变量对象的创建过程

变量对象与活动对象:未进入执行阶段之前,变量对象中的属性都不能访问!但是进入执行阶段之后,变量对象转变为了活动对象,里面的属性都能被访问了,然后开始进行执行阶段的操作。他们其实都是同一个对象,只是处于执行上下文的不同生命周期。不过只有处于函数调用栈栈顶的执行上下文中的变量对象,才会变成活动对象

你可能感兴趣的:(Js变量对象)