Javascript基础,变量提升(hosting)



http://www.cnblogs.com/TonnyGu/archive/2011/09/29/2195459.html


myname="global";
2 function fun(){
3   alert(myname);    //undefined
4   var myname="local";
5   alert(myname);    //local
6 }
7 fun();
8
9 myname="global";
10 function fun(){
11   alert(myname);    //global
12   //var myname="local";
13   //alert(myname);   
14 }
15 fun();
16
17 var myname="global";
18 function fun(){
19   alert(myname);    //global
20   myname="local";
21   //alert(myname);
22 }
23 fun();
24
25 //原因是JavaScript有变量声明提升(Hoisting)
26 //var表达式和function声明都将会提升到当前作用域的顶部
27 //PS:
28 //函数声明:function functionname (arg0, arg1, arg2) { 函数体 }
29 //函数表达式:var functionname = function (arg0, arg1, arg2) { 函数体 }
30 myname="global";
31 function fun(){
32   alert(myname);    //undefined
33   var myname="local";
34   alert(myname);    //local
35 }
36 fun();
37
38 //这个函数其实为:
39
40 myname="global";
41 function fun(){
42   var myname;       //变量声明.变量声明但未对其初始化时,这个变量为undefined;
43                     //myname被提升到当前函数作用域链的顶部
44   alert(myname);    //undefined
45   myname="local";   //变量初始化
46   alert(myname);    //local
47 }
48 fun();
49
50 //总结最佳实践:Declare All variables at the top
51 function() { 
52   var a, b, c;   //声明
53   a = 'a';         //初始化
54   b = 'b';
55   c = 'c';
56 }

你可能感兴趣的:(js)