Javascript中函数及变量定义的提升

  1. <html>  
  2. <head>  
  3. <title>函数提升</title>  
  4. <script language="javascript" type="text/javascript">  
  5.       
  6.     //在全局对象中声明两个全局函数,反模式  
  7.     function foo()  
  8.     {  
  9.         alert("global foo");  
  10.     }  
  11.       
  12.     function bar()  
  13.     {  
  14.         alert("global bar");  
  15.     }  
  16.   
  17.     //定义全局变量  
  18.     var v = "global var";  
  19.       
  20.     function hoistMe()  
  21.     {  
  22.         alert(typeof foo); //function  
  23.         alert(typeof bar); //undefined  
  24.         alert(v); //undefined  
  25.   
  26.         //为什么bar函数和变量v是未定义而不是全局变量中定义的相应的函数变量呢?  
  27.          //因为函数里面定义了同名的函数和变量,无论在函数的任何位置定义这些函数和  
  28.          //和变量,它们都将被提升到函数的最顶部。  
  29.           
  30.         foo(); //local foo  
  31.         bar(); //报错,缺少对象  
  32.           
  33.         //函数声明,变量foo以及其实现被提升到hoistMe函数顶部  
  34.         function foo()  
  35.         {  
  36.             alert("local foo");  
  37.         }  
  38.           
  39.         //函数表达式,仅变量bar被提升到函数顶部,实现没有被提升  
  40.         var bar = function()  
  41.         {  
  42.             alert("local bar");  
  43.         };  
  44.   
  45.           
  46.         //定义局部变量  
  47.          var v = "local";  
  48.     }  
  49.       
  50.     (function()  
  51.     {  
  52.         hoistMe();  
  53.           
  54.     })();  
  55.       
  56.    //函数表达式和变量表达式只是其声明被提升,函数声明是函数的声明和实现都被提升。  
  57.     /**由于函数提升的效果,hoistMe方法相当于 
  58.     function hoistMe() 
  59.     { 
  60.         //函数声明,变量foo以及其实现被提升到hoistMe函数顶部 
  61.         function foo() 
  62.         { 
  63.             alert("local foo"); 
  64.         } 
  65.          
  66.          //函数表达式,仅变量bar被提升到函数顶部,实现没有被提升(同变量提升) 
  67.         var bar = undefined; 
  68.          
  69.         //变量声明被提升 
  70.          var v = undefined; 
  71.          
  72.         alert(typeof foo); //function 
  73.         alert(typeof bar); //undefined 
  74.          
  75.         foo(); //local foo 
  76.         bar(); //报错,缺少对象 
  77.         
  78.         bar = function() 
  79.         { 
  80.             alert("local bar"); 
  81.         }; 
  82.        
  83.        v = "local"; 
  84.          
  85.     } 
  86.     */  
  87. </script>  
  88.   
  89. </head>  
  90. <body>  
  91. </body>  
  92. </html>  
原文地址:https://www.cnblogs.com/xiaotaiyang/p/4617863.html