變量提高(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