var a = 123;
function f() {
alert(a); // undefined
var a = 1;
alert(a); // 1
}
f();
JavaScript 引擎在進入函數 f 時,會將函數內所有 var 聲明提升到函數頂部,但賦值留在原地。等價於:
var a = 123;
function f() {
var a; // 聲明提升,值為 undefined
alert(a); // undefined
a = 1; // 賦值
alert(a); // 1
}
f();
let/const (ES6) 替代 var,擁有塊級作用域且存在「暫時性死區」,避免提升陷阱。no-use-before-define 規則檢測。