JavaScript的预编译学习

2018-06-28  本文已影响0人  gzlfight

预编译

一、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
    }
上一篇下一篇

猜你喜欢

热点阅读