美文网首页
七 预编译 & 初识作用域

七 预编译 & 初识作用域

作者: WIN_Inn | 来源:发表于2018-09-15 22:52 被阅读0次

    js执行三部曲 

        语法分析       // 通篇扫描,但是不编译

        预编译           // 四部曲     1.创建AO对象(执行期上下文,也就是作用域) 

                                                 2.找形参和变量声明,值为undefined

                                                 3.把形参和实参相统一

                                                 4.找函数里的函数声明,值赋予函数体

        解释执行       // 解释一行,执行一行    

        预编译发现在函数执行的前一刻

    注意: 全局的变量明和局部函数的变量名相同时,内部打印时访问的时内部的变量

                全局的 GO 除了变量不要忘记了函数声明

    GO:   window === GO   

    var a = 123;  function a(){ } .  console.log( a );    // 打印出123

    预编译 

    前奏

        函数声明整体声明( 区别于函数表达式 ),变量的声明提升

        暗示全局变量 imply global : 任何变量,如果未经声明描,直接赋值,那么变量归window所有。

        一切声明的全局变量都是window的属性。

    var a = b = 3;   //此时b未经声明,所有b是全局变量,window.b可以访问

    运行期上下文

    运行期上下文:当函数执行时,会创建一个称为执行期上下文的内部对象( AO, GO )。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行期上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行完毕,它所产生的执行上下文被销毁。

    查找变量:从作用域链的顶端依次向下查找。

    作用域定义

    [[scope]] : 每个javascript 函数都是一个对象,对象中有些属性可以访问,但有些不可以,这些属性仅供javascript引擎存取,[[scope]]就是其中一个。

    [[scope]]指的就是我们所说的作用域,其中存储了运行期上下文的集合。

    作用域链:[[scope]]中所存储的执行期上下文对象的集合,这个集合呈链式链接,我们把这种链式链接叫做作用域链。

    function a ( ) { 

        function b ( ) {

            function c ( ) { 

            }

              c ( ) ;

        }

        b ( ) ;

    }

    a ( );

    a defined :  a.[[scope]] -->  0:GO

    a doing     :  a.[[scope]] -->  0: aAO

                                                       1: GO

    b defined  : b.[[scope]] -->  0: aAO

                                                       1: GO

    b doing     : b.[[scope]] --> 0: bAO

                                                      1: aAO

                                                      2: GO

    c defined  : c.[[scope]] --> 0: bAO

                                                     1: aAO

                                                      2: GO

    c doing      : c.[[scope]] --> 0: cAO

                                                     1: bAO

                                                     2: aAO

                                                     3: GO

                                                    

    相关文章

      网友评论

          本文标题:七 预编译 & 初识作用域

          本文链接:https://www.haomeiwen.com/subject/esoggftx.html