JavaScript中变量或者函数的声明会被提升(赋值语句不会被提升)到当前函数主体的顶部,不管这个声明是否出现在不可到达的地方。
1 var test = 1; 2 function f() { 3 if(!test){ 4 var test=10; 5 } 6 alert(test); 7 } 8 f();
如上的代码相当于:
1 var test = 1; 2 function f(){ 3 var test; 4 if(!test){ 5 test = 10; 6 } 7 alert(test); 8 } 9 f();
如上的输出为10
再一个例子:
1 var test=1; 2 function f(){ 3 test = 10; 4 return; 5 function test(){} 6 } 7 f(); 8 alert(test);
相当于:
1 var test=1; 2 function f(){ 3 function test(){} 4 test = 10; 5 } 6 f(); 7 alert(test);
如上的输出为1