JavaScript 中,函數及變量的聲明都将被提升到函數的最頂部。
JavaScript 中,變量可以在使用後聲明,也就是變量可以先使用再聲明。
以下兩個執行個體将獲得相同的結果:
x = 5; // 變量 x 設定為 5
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x;
// 在元素中顯示 x
var x; // 聲明 x
要了解以上執行個體就需要了解 "hoisting(聲明提升)"。
聲明提升:函數聲明和變量聲明總是會被解釋器悄悄地被"提升"到方法體的最頂部。
JavaScript 隻有聲明的變量會提升,初始化的不會。
以下兩個執行個體結果結果不相同:
var x = 5; // 初始化 x
var y = 7; // 初始化 y
elem.innerHTML = x + " " + y; // 顯示 x 和 y
執行個體 2 的 y 輸出了 <b>undefined</b>,這是因為變量聲明 (var y) 提升了,但是初始化(y = 7) 并不會提升,是以 y 變量是一個未定義的變量。
執行個體 2 類似以下代碼:
對于大多數程式員來說并不知道 JavaScript 聲明提升。
如果程式員不能很好的了解聲明提升,他們寫的程式就容易出現一些問題。
為了避免這些問題,通常我們在每個作用域開始前聲明這些變量,這也是正常的 JavaScript 解析步驟,易于我們了解。

JavaScript 嚴格模式(strict mode)不允許使用未聲明的變量。
在下一個章節中我們将會學習到 "嚴格模式(strict mode)" 。