JavaScript有变量声明提升(Hoisting),
var表达式和function声明都将会提升到当前作用域的顶部
1 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 }
57
58 //还有一个有趣的东西
59 function foo() {
60 var a = b = 0;
61 // ...
62 }
63 alert(a);
64 alert(b);
65 //这个结果是什么?