zoukankan      html  css  js  c++  java
  • 预解析(代码提升)

     1 //1)
     2         console.log(a);
     3         var a=10
     4         // 以上发生域解析,将var a申明提前,相当于如下
     5         var a;
     6         console.log(a);
     7         a=10;
     8         
     9         //2)
    10         console.log(fun);
    11          function fun(){
    12             console.log("fun");
    13         }
    14         // 函数声明发生域解析,将整个函数提前,相当于如下
    15         function fun(){
    16             console.log("fun");
    17         };
    18         
    19         console.log(fun);

    //预解析:预解释 还叫代码提升
    //在程序开始执行后,代码执行之前,会发生预解析

    //预解析会发生在 函数声明定义的函数 和 带var的变量身上
    //代码开始执行之前会预解析:预解析分为两步:
    //1、先预解析 函数声明定义的函数,函数重名会发生覆盖
    //2、再预解析 带var的变量(预解析不会带着值,只会提升变量),变量名重复会忽略
    //注意:函数如果是函数表达式定义的,当做带var的变量去对待
    // 变量如果是不带var定义的,不会发生预解析

    函数内部也要做预解析,预解析是在函数调用才开始的,解析和全局一样

    例题:

      1 <!DOCTYPE html>
      2 <html>
      3     <head>
      4         <meta charset="UTF-8">
      5         <title></title>
      6     </head>
      7     <body>
      8         <script type="text/javascript">
      9     
     10             //预解析:预解释 还叫代码提升
     11             //在程序开始执行后,代码执行之前,会发生预解析
     12             
     13             //预解析会发生在  函数声明定义的函数 和 带var的变量身上
     14             //代码开始执行之前会预解析:预解析分为两步:
     15             //1、先预解析 函数声明定义的函数,函数重名会发生覆盖,
     16             //2、再预解析 带var的变量(预解析不会带着值,只会提升变量),变量名重复会忽略;
     17             //注意:函数如果是函数表达式定义的,当做带var的变量去对待
     18             //        变量如果是不带var定义的,不会发生预解析
     19             
     20 
     21 //            console.log(a);//undefined
     22 //            var a;
     23             
     24             
     25             //1)
     26 
     27 //            alert(a);//报错   
     28 //            a = 0;
     29             
     30             
     31             //2)
     32             
     33             alert(a);
     34             var a=0;
     35             alert(a)
     36             // 预解析后
     37 //            var a;
     38 //            alert(a);  //  undefined
     39 //            a = 0;
     40 //            alert(a); //   0
     41             
     42             //3)注意看看
     43 
     44 //            var a = [1,2,3];  
     45 //            alert(a);//[1,2,3]
     46 //            var a = function(){};
     47 //            console.log(a);//function(){};
     48 
     49             
     50 //            function a(){ alert('我是函数') }
     51 ////            var a//提升上来后发现和上面的变量名重复,会忽略掉
     52 //            alert(a); // function a(){ alert('我是函数') }
     53 //            
     54 ////            注意: 函数声明定义的函数和函数表达式定义的函数有2个区别,除此以外,同等对待
     55 //            //1、预解析的时候有区别
     56 //            //2、打印的时候有区别,函数声明定义的函数会带名字打印,函数表达式定义的不带名字
     57 //            a = '我是变量';
     58 //            alert(a); 
     59             
     60             //4)
     61             
     62             alert(a); 
     63             a++;
     64             alert(a);    
     65             var a = '我是变量';
     66             function a(){ alert('我是函数') }
     67             alert(a) 
     68 
     69             // 预解析后
     70 //            function a(){ alert('我是函数') } 
     71 ////            var a
     72 //            alert(a); //function a(){ alert('我是函数') }   
     73 //            a++;// ++是一个算术运算符(自增自减)NaN
     74 //            alert(a);//NaN    
     75 //            a = '我是变量';
     76 //            alert(a) //'我是变量';
     77             
     78             //5
     79             
     80             alert(a);   
     81             var a = 0;
     82             alert(a);   
     83             function fn(){
     84                 alert(a);    
     85                 var a = 1;
     86                 alert(a);    
     87             }
     88             fn()
     89             alert(a);   
     90             
     91             //全局预解析
     92 //            function fn(){
     93 //                //函数内部也要做预解析,预解析是在函数调用才开始的,解析和全局一样
     94 //                var a;
     95 //                 alert(a); //undefined   
     96 //                 a = 1;
     97 //                 alert(a); //1   
     98 //            };    //var  fn = function(){}
     99 //            
    100 //            var a;
    101 //            alert(a);//undefined
    102 //            a = 0;
    103 //            alert(a); //0  
    104 //            fn()
    105 //            alert(a); // 0  
    106             
    107             
    108             //6、
    109             
    110             alert(a);    
    111                 var a = 0;
    112                 alert(a);    
    113                 function fn(){
    114                        alert(a);    
    115                        a = 1;
    116                        alert(a);   
    117                 }    
    118                 fn()
    119                 alert(a);   
    120                 // 预解析后
    121             
    122 //            function fn(){
    123 //                   alert(a); // 0  
    124 //                   a = 1;//隔山打牛改全局为1
    125 //                   alert(a);  //1 
    126 //            }
    127 //            
    128 //            var a;
    129 //            alert(a);//undefined    
    130 //            a = 0;
    131 //            alert(a);//0    
    132 //            fn()
    133 //            alert(a); //  1
    134             
    135             
    136             
    137             //7、
    138             
    139 //            function fn(){
    140 //                   alert(a);    
    141 //                   a = 1;
    142 //                   alert(a);   
    143 //            }
    144             
    145             function fn(){
    146                 var a
    147                  alert(a);//undefined    
    148                  a = 1;
    149                  alert(a);//1    
    150             }//var fn = function(){};
    151             
    152             var a;
    153 //            var fn;
    154 //            var a
    155             alert(a); //undefined   
    156             a = 0;
    157             alert(a); //0   
    158             fn();
    159             
    160             fn = function(){
    161                 alert(a); // 0  
    162                  a = 1;
    163                  alert(a);//1
    164             }
    165             
    166             fn();
    167             
    168             
    169             
    170             a = 100;
    171             alert(a);  //100 
    172             
    173         </script>
    174     </body>
    175 </html>
  • 相关阅读:
    js学习之——js编写基本规范
    js学习之——数组的迭代方法
    css透明度设置,兼容所有的浏览器
    Mariadb配置主从复制
    Java枚举类型在switch语句中的正确用法
    Linux安装git
    Linux安装Jdk&Maven
    Postman配置token为全局变量
    Docker容器迁移
    Java获取当前时间到凌晨12点剩余秒数
  • 原文地址:https://www.cnblogs.com/fsg6/p/12783589.html
Copyright © 2011-2022 走看看