预解析(代码提升)

 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>

 

posted @ 2020-04-26 23:44  全情海洋  阅读(184)  评论(0编辑  收藏  举报