var 宣告的變數在函式作用域內是全域的,並且可以在函式內的任何地方使用。
var 變數可以重新宣告和重新賦值。
var 變數會被提升(hoisting),即變數宣告會被提升到作用域的頂端。
function varExample() {
console.log(a); // undefined (變數提升)
var a = 10;
console.log(a); // 10
if (true) {
var a = 20; // 重新宣告和賦值
console.log(a); // 20
}
console.log(a); // 20 (函式作用域)
}
varExample();
const 宣告的變數是區塊作用域(block-scoped),即只能在宣告它的區塊內使用。
const 變數必須在宣告時賦值,並且不能重新賦值。
const 變數也會被提升,但在初始化之前不能使用。
function constExample() {
const b = 10;
console.log(b); // 10
if (true) {
const b = 20; // 區塊作用域內的新變數
console.log(b); // 20
}
console.log(b); // 10 (外部區塊作用域)
// b = 30; // 錯誤:不能重新賦值
}
constExample();
function letExample() {
let c = 10;
console.log(c); // 10
if (true) {
let c = 20; // 區塊作用域內的新變數
console.log(c); // 20
}
console.log(c); // 10 (外部區塊作用域)
c = 30; // 可以重新賦值
console.log(c); // 30
}
letExample();