函数在创建过程中,并不是直接把函数渲染出来,而是一步步的渲染处理。
看下面的黑色图片。
首先说一下,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......