以下是 JavaScript 宣告變數的規則與例子。
var 宣告變數
var
具有 Hoisting(提升) 行為,變數在編譯階段即被提升,相當於變數被宣告在程式的最開頭,因此可以在宣告前使用,但值為undefined
。var
可以重複宣告,新的宣告若有指定值,會覆蓋舊的值。var
宣告的變數屬於 函式範圍(Function Scope),若在函式內宣告,則變數僅在該函式內有效,否則會變成全域變數。- 變數提升的例子:
console.log(a); // undefined
var a = 10;
console.log(a); // 10
函式宣告(Function Declaration)
- 函式宣告(function declaration) 也會發生 Hoisting,與
var
不同的是,函式不僅提升宣告,也會提升其完整的定義,故可在宣告前呼叫。 - 例子:
console.log(foo()); // "Hello"
function foo() {
return "Hello";
}
let 與 const 宣告變數
let
和const
不會被提升到程式的最開頭,但仍然會被 Hoisting,只是它們會進入「暫時性死區(Temporal Dead Zone, TDZ)」,在變數宣告之前無法存取,否則會拋出ReferenceError
。let
允許變數重新賦值,但 不能重複宣告。const
代表 常數(constant),必須在宣告時初始化,且無法重新賦值。let
和const
屬於區塊範圍(Block Scope),即{}
內的變數不會影響區塊外的變數。- 例子:
console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 20;
console.log(b); // 20
const PI = 3.14159;
PI = 3.14; // TypeError: Assignment to constant variable.