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