变量提升(Hoisting)被认为是,Javascript 中执行上下文(特别是创建和执行阶段)工作方式的一种认识。
需要注意的是,变量提升并不是物理上层面上的把代码移动到最前面。而是变量和函数声明在代码里面的位置不会动,在编译阶段被放入内存中。
// 正确的方式:先声明函数,在调用函数
function speaker(value){console.log(value); } speaker('变量提升');// 变量提升
我们正确的编码方式就是先声明,后调用,不过在 Javascript 中,先调用,后声明也是可以的
// 先调用,后声明
speaker('变量提升');// 变量提升 function speaker(value){console.log(value); }
先调用,后声明之所以仍然可以正常运行,这是因为在 JavaScript 中执行上下文的工作方式造成的。
变量提升也适用于其他类型和变量。变量可以在声明之前进行初始化和使用。但是如果没有初始化,就不能使用它们。
// 变量初始化在声明之前
a = 6; var a; console.log(a)//6
JavaScript 仅提升声明,而不提升初始化。如果你先使用的变量,再声明并初始化它,变量的值将是 undefined。
var x = 1; // 声明 + 初始化 x console.log(x + "" + y); //'1 undefined' var y = 2; // 声明 + 初始化 y
// 上面的代码和下面的代码是一样的
var x = 1; // 声明 + 初始化 x var y; // 声明 y console.log(x + " " + y); //y 是未定义的 y = 2; // 初始化 y