zoukankan      html  css  js  c++  java
  • JavaScript之预编译

    JavaScript执行步骤

    1.检查通篇的语法错误
    2.预编译过程
    3.解释一行,执行一行

     1   (a)
     2   test()
     3   function test() {
     4     console.log(1) // 1
     5   }
     6 
     7   (b)
     8   console.log(a); // undefined
     9   var a ;
    10 
    11   函数申明整体提升,变量只有申明提升,赋值不提升
    12 
    13   (c)
    14   console.log(a) // function a(a){}
    15   function a(a){}
    16   var a = 1
    17 
    18   (d)
    19   var a = 1
    20   b = 2
    21   console.log(window.b) // a = window.a
    22                         // b = window.b

    暗示全局变量 imply global variable

     1   (a)
     2   function test(){
     3     var a = b = 1
     4     // 1.先声明 var a
     5     // 2.1赋值给b
     6     // 3.b的值赋值给a
     7   }
     8   console.log(a) // error
     9   console.log(window.a) // undefined
    10   console.log(b) // 1
    11   console.log(window.b) // 1
    12 
    13   (b)
    14   function test(a) {
    15    console.log(a) // function a() {}
    16    var a = 1
    17    console.log(a) // 1
    18    function a() {}
    19    console.log(a) // 1
    20    var b = function () {}
    21    console.log(b) // function(){}
    22    function d() {}
    23   }
    24   test(2)

    函数预编译:AO activation object (活跃对象,函数上下文)

     1  function test(a) {
     2    console.log(a) // function a() {}
     3    var a = 1
     4    console.log(a) // 1
     5    function a() {}
     6    console.log(a) // 1
     7    var b = function () {}
     8    console.log(b) // function(){}
     9    function d() {}
    10   }
    11   test(2)
    12     
    13  执行过程
    14 
    15  AO = {
    16 
    17   }
    18 
    19   <-预编译过程->
    20 
    21   第一步:寻找形参和变量申明
    22   AO = {
    23     a: undefined,
    24     b: undefined
    25   }
    26 
    27   第二步:实参赋值给形参
    28   AO = {
    29     a: undefined -> 2,
    30     b: undefined
    31   }
    32 
    33   第三步:寻找函数体的申明,并赋值
    34   AO = {
    35     a: undefined -> 2 -> function a() {},
    36     b: undefined,
    37     d: function d() {}
    38   }
    39 
    40   <-代码执行过程->
    41  第四步:执行函数体第一句
    42  // console.log(a):function a(){}
    43 
    44  第五步:执行函数体第二局
    45  //a = 1
    46   AO = {
    47     a: undefined -> 2 -> function a() {} -> 1,
    48     b: undefined,
    49     d: function d() {}
    50   }
    51 
    52   ....

     全局预编译:GO global object 全局上下文


    1. 找变量
    2. 找函数申明
    3. 执行

     1   (a)
     2   var a = 1
     3   function a() {
     4     console.log(2)
     5   }
     6   console.log(a) // 1
     7 
     8   GO = {
     9     a: undefined -> function a(){} -> 1
    10   }
    11 
    12   其实GO就是window,即GO === window
    13 
    14   (b)
    15   console.log(a, b) // function a(){} undefined
    16   function a() {}
    17   var b = function () {}
    18 
    19   GO = {
    20     b: undefined
    21     a: function a(){}
    22   }

    练习

      1 练习
      2 
      3   (1  4    function test() {
      5       var a = b = 1;
      6       console.log(b); // 1
      7    }
      8    test();
      9    步骤:
     10    <-预编译过程->
     11    1.
     12    GO = {
     13 
     14    }
     15 
     16    2.
     17    GO = {
     18 
     19    }
     20 
     21    AO = {
     22       a: undefined
     23    }
     24    <-执行过程->
     25    3.
     26    GO = {
     27       b: 1
     28    }
     29 
     30    AO = {
     31       a: undefined
     32    }
     33 
     34    4.
     35    GO = {
     36       b: 1
     37    }
     38 
     39    AO = {
     40       a: undefined -> 1
     41    }
     42 
     43    (2)
     44    var b = 3;
     45    console.log(a); // function a(a){...}
     46    function a(a){
     47       console.log(a) // function a(){}
     48       var a = 2;
     49       console.log(a); // 2
     50       function a(){}
     51       var b = 5;
     52       console.log(b) // 5
     53    }
     54    a(1);
     55 
     56    步骤:
     57 
     58    <-编译过程->
     59 
     60    GO = {
     61       b: undefined,
     62       a: function a(){...}
     63    }
     64 
     65    AO = {
     66       a: undefined -> 1 -> function a(){}
     67       b: undefined
     68    }
     69 
     70   <-执行过程->
     71 
     72    GO = {
     73       b: undefined -> 3,
     74       a: function a(){...}
     75    }
     76 
     77    AO = {
     78       a: undefined -> 1 -> function a(){} -> 2
     79       b: undefined -> 5
     80    }
     81 
     82 
     83   (3)
     84   a = 1;
     85   function test(){
     86     console.log(a); // undefined
     87     a = 2;
     88     console.log(a); // 2
     89     var a = 3;
     90     console.log(a) // 3
     91   }
     92   test()
     93 
     94   (4)
     95   function test(){
     96     console.log(b); // undefined
     97     if (a) {
     98       var b = 2;
     99     }
    100 
    101     c = 3;
    102     console.log(c) // 3
    103   }
    104 
    105   var a;
    106   test();
    107   a = 1;
    108   console.log(a); // 1
    109 
    110   (5)
    111   function test(){
    112     return a;
    113     a = 1;
    114     function a(){}
    115     var a = 2;
    116   }
    117   console.log(test()); // function a(){}
    118 
    119 
    120   (6)
    121   function test(){
    122     a = 1;
    123     functin a(){}
    124     var a = 2;
    125     return a;
    126   }
    127   console.log(test()); // 2
    128 
    129   (7)
    130   a = 1;
    131   function test(e){
    132     function e(){}
    133     arguments[0] = 2;
    134     console.log(e); // 2
    135     if(a){
    136       var b = 3;
    137     }
    138     var c;
    139     a = 4;
    140     var a;
    141     console.log(b); // undefined
    142     f = 5;
    143     console.log(c); // undefined
    144     console.log(a); // 4
    145   }
    146   var a;
    147   test(1);
  • 相关阅读:
    iOS开发- 蓝牙后台接收数据(BLE4.0)
    代码优化之减少重复代码-实践
    微信iOS多设备多字体适配方案总结
    iOS微信小视频优化心得
    iOS项目工程及目录结构
    手机淘宝 521 性能优化项目揭秘
    最大连续和
    struts2入门
    Maven环境搭配及继承
    easyui高级控件
  • 原文地址:https://www.cnblogs.com/wanghao123/p/10451612.html
Copyright © 2011-2022 走看看