变量对象

如果变量与执行上下文相关,那变量自己应该知道它的数据存储在哪里,并且知道如何访问。这种机制称为变量对象(variable object)。

变量对象(缩写为VO)是一个与执行上下文相关的特殊对象,它存储着在上下文中声明的以下内容:
变量 (var, 变量声明);
函数声明 (FunctionDeclaration, 缩写为FD);
函数的形参

举例来说,我们可以用普通的ECMAScript对象来表示一个变量对象:

VO = {};



 每一个执行上下文都有一个变量对象,在函数内部定义的所有变量和函数都被添加到这个对象的属性.

整个过程的描述:

 1> 对于任何形参,在变相对象上添加相应的属性,并把它们的值设置为传递给函数参数的值

   2> 对于任何函数声明,在变量对象上添加相应的属性,值即为该函数.如果一个函数声明使用了和形参中任何一个相同的标识符,那么那个属性将被覆盖.

   3>对于任何变量声明,在变量对象上添加相应的属性,初始化它们的值为undefined,不管这些变量在源代码中是怎样呗初始化的,如果一个变量使用与一个已经定义过的属性相同的标识符,那么        

     这些定义过的属性不一定被覆盖

 该算法的作用就是是所谓的函数和变量声明的提升,虽然函数作为整体被提升,但变量却只有它们的声明呗提升

原文地址:https://www.cnblogs.com/yangyang63963/p/5690825.html