美文网首页
JavaScript的预编译学习

JavaScript的预编译学习

作者: gzlfight | 来源:发表于2018-06-28 16:57 被阅读0次

    预编译

    一、js运行三部曲
                              1. 语法分析   2. 预编译  3. 解释执行
    
    二、预编译前奏
         1.imply global 暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象所有。
         如 a = 10 , 则 window.a = 10;
         如function test() {
               var a  = b = 123;
           }
           test();
           先将123赋给b,然后声明a,然后将b赋给a;
           console.log(b)   -->   123;
           console.log(a)   -->   undefined
         2.一切声明的全局变量,全是window的属性, 如
            var a = 123,则window.a = 10;
            console.log(a)  -->  console.log(window.a)
         window就是全局的域 
    
    三、预编译
              预编译发生在函数执行的前一刻
    
    
                     局部(AO)
    
        1.创建AO对象  (Activation Object)(执行期上下文)
    
        2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
    
        3.将实参值和形参统一
    
        4.在函数体里面找函数声明,值赋予函数体
    
    
    
                     全局(GO)            window === GO
    
        1.生成了一个GO对象  Global Object
    
        2.找变量声明,将变量作为GO属性名,值为undefined
    
        4.在函数体里面找函数声明,值赋予函数体
    
    例一:(局部)
    <script type="text/javascript">
            function fn(a) {
                console.log(a);    //f a() {}
    
                var a = 123;
    
                console.log(a);    //123
    
                function a() {}
    
                console.log(a);    //123
    
                var b = function () {}
    
                console.log(b);    //f () {}
    
                function d() {}
            }
            fn(1);
    </script>
    
    1.创建AO对象
    2.  AO{
            a: undefined,
            b: undefined,
        }
    3.  AO{
            a: 1,
            b: undefined,
         }
    4.  AO{
            a: function a() {},
            b: undefined,
            d: function d() {}
         }
     执行函数对a赋值
     AO{
            a: 123,
            b: undefined,
            d: function d() {}
        }
     执行函数对b赋值
      AO{
            a: 123,
            b: function () {},
            d: function d() {}
        }
    
    例二:(全局)
    <script type="text/javascript">     
           console.log(a);   //f a() {}
           var a = 123;
           function a() {}
           console.log(a);  //123
    </script>
    
    1.创建GO对象      
    2. GO{
            a:undefined;
        }
    4. GO{
            a:function () {}   
        }
    执行函数对a赋值
       GO{
            a:123
        }
    

    相关文章

      网友评论

          本文标题:JavaScript的预编译学习

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