JavaScript 宣告提升
JavaScript 宣告提升
JavaScript 中,函式及變數的宣告都將被提升到函式的最頂部。
JavaScript 中,變數可以在使用後宣告,也就是變數可以先使用再宣告。
以下兩個例項將獲得相同的結果:
例項 1
x = 5; // 變數 x 設定為 5
elem = document.getElementById("demo"); // 查詢元素
elem.innerHTML = x; // 在元素中顯示 x
var x; // 宣告 x
elem = document.getElementById("demo"); // 查詢元素
elem.innerHTML = x; // 在元素中顯示 x
var x; // 宣告 x
嘗試一下 ?
例項 2
var x; // 宣告 x
x = 5; // 變數 x 設定為 5
elem = document.getElementById("demo"); // 查詢元素
elem.innerHTML = x; // 在元素中顯示 x
x = 5; // 變數 x 設定為 5
elem = document.getElementById("demo"); // 查詢元素
elem.innerHTML = x; // 在元素中顯示 x
嘗試一下 ?
要理解以上例項就需要理解 "hoisting(宣告提升)"。
宣告提升:函式宣告和變數宣告總是會被直譯器悄悄地被"提升"到方法體的最頂部。
JavaScript 初始化不會提升
JavaScript 只有宣告的變數會提升,初始化的不會。
以下兩個例項結果結果不相同:
例項 1
var x = 5; // 初始化 x
var y = 7; // 初始化 y
elem = document.getElementById("demo"); // 查詢元素
elem.innerHTML = x + " " + y; // 顯示 x 和 y
var y = 7; // 初始化 y
elem = document.getElementById("demo"); // 查詢元素
elem.innerHTML = x + " " + y; // 顯示 x 和 y
嘗試一下 ?
例項 2
var x = 5; // 初始化 x
elem = document.getElementById("demo"); // 查詢元素
elem.innerHTML = x + " " + y; // 顯示 x 和 y
var y = 7; // 初始化 y
elem = document.getElementById("demo"); // 查詢元素
elem.innerHTML = x + " " + y; // 顯示 x 和 y
var y = 7; // 初始化 y
嘗試一下 ?
例項 2 的 y 輸出了 undefined,這是因為變數宣告 (var y) 提升了,但是初始化(y = 7) 並不會提升,所以 y 變數是一個未定義的變數。
例項 2 類似以下程式碼:
var x = 5; // 初始化 x var y; // 宣告 y elem = document.getElementById("demo"); // 查詢元素 elem.innerHTML = x + " " + y; // 顯示 x 和 y y = 7; // 設定 y 為 7
在頭部宣告你的變數
對於大多數程式設計師來說並不知道 JavaScript 宣告提升。
如果程式設計師不能很好的理解宣告提升,他們寫的程式就容易出現一些問題。
為了避免這些問題,通常我們在每個作用域開始前宣告這些變數,這也是正常的 JavaScript 解析步驟,易於我們理解。
![]() |
JavaScript 嚴格模式(strict mode)不允許使用未宣告的變數。 在下一個章節中我們將會學習到 "嚴格模式(strict mode)" 。 |
---|