原文:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html
JavaScript中存在一种声明提升的现象,这种现象的例子如下:
var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar();//1 var a = 1; function b() { a = 10; return; function a() {} } b(); alert(a);//1
原理:
由于变量提升,因此会在函数的最顶部进行变量和函数的声明,即声明提升。
举个例子来解释这种机制:
function foo() { if (false) { var x = 1; } return; var y = 1; }
上述代码的执行过程其实如下:
function foo() { var x, y; if (false) { x = 1; } return; y = 1; }
因此就造成了第一个例子中的现象。
另附声明提升的顺序:
1. 默认变量,例如this和arguments;
2. 函数的参数;
3. 函数的声明;
4. 变量的声明。