变量对象和活动对象有什么区别.

函数在创建过程中,并不是直接把函数渲染出来,而是一步步的渲染处理。

看下面的黑色图片。

首先说一下,function的优先级会比var声明高一些。

下面的图片里,定义了test()函数,我们从test()的上下文来进行理解

函数一开始根据test()函数的属性,来创建对应的变量对象。

VO:Variable Object 

把所有的函数生命放进现在声明的变量对象中

然后把所有的变量声明放进变量对象中

他们其实都是同一个对象,只是处于执行上下文的不同生命周期。不过只有处于函数调用栈栈顶的执行上下文中的变量对象,才会变成活动对象。

附加

 在函数里,先执行function的定义。这里有全局函数test()。当然首先建立arguments对象。

在test里有function,function的优先级比var的要高一些,先执行function

在创始阶段 foo<foo reference > 

<>里面的这一块是为后面的function准备好的地址。在发现有var,执行var bar:undefined

这里注意.

有两个foo,此时规定 当var声明的变量遇到同名属性时,会跳过不会覆盖

创建阶段完成,进行执行阶段,这里就是活动对象和变量对象的分界岭了

end......

原文地址:https://www.cnblogs.com/zx-qd/p/10521968.html