美文网首页
javascript 预编译

javascript 预编译

作者: branv | 来源:发表于2018-03-11 09:14 被阅读11次

    ######预编译前奏

    1.imply global 暗示全局变量:即任何变量未经声明就赋值,则此变量就为全局对象(window)所有。

    eg: ```  a=3; ```

    eg:  ``` var a=b=123; ```

    eg: ``` var a = 1;

      b = 2;

      function test() {

          var c = d = 9;

      }

      test();

      consolo.log(c); //error

      console.log(d); //undifend

      ```

    2.一切声明的全局bian'liang变量,quan'shi全是windowde属性的

    eg:  ``` var a=123 =====>window.a=123 ```

    ######预编译 四部曲

    函数预编译发生在函数发生前一刻,

    ①函数体创建AO(Activation object 也叫执行期上下文)对象

    ②找形参和变量声明,将变量和形参名作为AO属性名,值为undefined

    ③将实参值和形参统一

    ④在函数体里面找函数声明,值赋予函数体

    全局的预编译:

    ①函数体创建GO对象

    ②找变量声明,将变量名作为GO属性名,值为undefined

    ③找函数声明,值赋予函数体

    ④代码走到每一步,执行每行代码(赋值操作等)

    eg:

    ```

        var a = 100;

        var b = 200;

        console.log("f=" + f);// f=function f() { }

        var f = 100;

        console.log("f=" + f);// f=100

        function f() { }

        console.log(f);// 100

        function fn(a) {

            console.log("a =" + a)  //a=function a() { }

            if (a) {

                a = 400;

                function e() {

                }

            }

            console.log(a);// 400

            function a() { }

            console.log(a);// 400

            console.log(b);// undefined

            var b = function () { }

            console.log(b);  //function b()

            function d() {

            }

        }

        fn(300);

    //---------------------全局GO 流程--------------------------

        // ②GO{

        //    a:undefined,

        //    b:undefined,

        //    f:undefined,

        // }

        // ③ GO{

        //    a:100,

        //    b:200,

        //    f:  function f() { }

        // }

        // ④代码执行到某一行,某一行的变量就被赋值

        //----------------fn AO 流程-------------------------------

        // fn函数执行前预编译

        // ②AO{

        //    a:undefined,

        //    b:undefined,

        //    d:undefined,

        //    e:undefined

        // }

        //③ AO{

        //    a:300

        //    b:undefined,

        //    d:undefined,

        //    e:undefined

        // }

      // ④AO{

        //    a: function a() { }

        //    b:undefined,

        //    d: function d() { }

        //    e:function e() { }

        // }

        //⑤代码走到哪一句,如果有赋值就赋值

    ```

    相关文章

      网友评论

          本文标题:javascript 预编译

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