var a = 'a';
say();
function say() {
console.log(a); // undefined
var a = 'b';
console.log(a); // 'b'
}
函數內 var a 被提升至函數頂部並初始化為 undefined,等價於:
function say() {
var a = undefined; // 提升
console.log(a); // 訪問局部 a → undefined
a = 'b'; // 賦值
console.log(a); // 'b'
}
var 聲明提升,賦值留在原處。a 被內層同名變量遮蔽(Shadowing)。let/const 有暫時性死區,直接報錯 ReferenceError,避免此陷阱。理解提升機制是掌握 JS 作用域的基石。