关于javascript中的变量对象和运动对象

关于javascript中的变量对象和运动对象

我GitHub上的菜鸟堆栈地点: 点击跳转检察其他相干文章
文章在我的博客上的地点: 点击跳转

        前面的文章说到, 实行高低文的建立阶段,主要有三个内容:

        1、建立变量对象;2、初始化作用域链;3、肯定this的指向。

        实行高低文的实行阶段,也有三个内容:

        1、变量赋值;2、函数援用;3、实行其他代码。

        在这里先说一个条件,我提到的函数挪用,说的是实行高低文的第一阶段,建立阶段(还没最先实行函数体相干的代码),提到的函数实行,说的是实行高低文的第二阶段,实行阶段(最先实行函数体相干的代码)。

        实在在说到实行高低文中的的变量对象的时刻,我印象中会冒出来两个英文简写:VO和AO。

        VO:Variable Object的简写,就是变量对象。

        AO:Activation Object的简写,叫做运动对象。

        这两个东西有什么区分呢?

        我的明白是,他们的区分就是在于实行高低文的差别生命周期阶段,变量对象VO在实行高低文的建立阶段,而运动对象AO在实行高低文的实行阶段。

        先说一下变量对象,它的构造大抵云云,在函数被挪用的时刻被建立:

VO:{
    arguments:Arguments,
    FunctionName:reference to function FunctionName(){},
    Variables:undefined
}

        VO(变量对象)包括:函数的形参(arguments)、函数声明(FunctionDeclaration, FD)、变量声明(VariableDeclaration,var)三个内容。

        简朴来讲,举个例子:

//声明example函数
function example(x){
    var a = 10;
    function plus(){
        return a + x;
    }
    return plus();
}
//挪用example函数
example(5);

        当挪用example函数的时刻,进入实行高低文的建立阶段,建立的变量对象为(自身看看什么是函数的形参、函数声明和变量声明):

VO:{
    arguments:{x:undefined},
    plus:reference to function plus(){},
    a:undefined
}

        当example函数最先实行的时刻,进入实行高低文的实行阶段,变量对象就会被激活,起首经由历程arguments属性初始化成为运动对象AO:

AO:{
    arguments:{callee:example,x:5,length:1},
    plus:reference to function plus(){},
    a:undefined
}

        固然了,arguments属性的值是Arguments对象,关于VO来讲,因为建立阶段只是形参,所以VO只需x一个undefined的值,而经由历程传入肯定的实参5初始化后,AO中的Arguments就多了指向自身函数callee和length两个属性了。

        固然,AO对象是跟着实行代码的实行历程当中而变化的,跟着代码的实行,变量最先初始化,下一步AO就会变成:

AO:{
    arguments:{callee:example,x:5,length:1},
    plus:reference to function plus(){},
    a:10
}

        当另有其他变量的时刻,实行历程自行明白一下就好了。

        所以高低文的实行阶段:变量赋值、函数援用、实行其他代码。这个历程也能够随意马虎明白了。

        末了,想说一下全局高低文(或许叫做全局实行高低文)的VO和AO,实在人人也能够晓得,实在我们实行一切的代码,都是基于一个全局高低文上的,只需你不退出全局高低文(比方浏览器的话全局对象就是window,你不封闭窗口的话,全局高低文就不会跳出实行高低文栈),就一向都在全局实行高低文的实行阶段了,所以实行的阶段就已经是AO了。其次,自身没有arguments属性,这个也能够轻易明白,全局对象它不是函数。

    原文作者:ershing
    原文地址: https://segmentfault.com/a/1190000010339180
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞