var声明存在变量提升,可在声明前访问但值为undefined;let和const具有块级作用域且处于暂时性死区中,声明前访问会报错,推荐优先使用以提升代码安全性。

JavaScript中的变量声明方式会影响其作用域和提升行为。使用var、let和const声明变量时,表现有明显差异,尤其是在变量提升和块级作用域方面。
var的变量提升
使用var声明的变量会被“提升”到当前函数或全局作用域的顶部。这意味着你可以在声明之前访问变量,但值为undefined。
例如:
console.log(a); // undefined
var a = 10;
这里变量a被提升了,但赋值仍保留在原位置,因此输出undefined。
let和const的块级作用域
let和const声明的变量具有块级作用域,只能在声明它们的代码块(如{})内访问。
例如:
if (true) {
let b = 20;
}
console.log(b); // ReferenceError
变量b只存在于if块中,外部无法访问。
暂时性死区(Temporal Dead Zone, TDZ)
let和const虽然也被“提升”,但在声明之前访问会抛出错误,这一区域称为暂时性死区。
例如:
console.log(c); // ReferenceError
let c = 30;
即使语法上看似“提升”,JavaScript会在解析时识别这种提前访问,并禁止使用,避免意外行为。
TDZ确保了变量必须先声明再使用,提高了代码的安全性和可读性。
基本上就这些。let和const通过块级作用域和暂时性死区,解决了var带来的变量提升陷阱,推荐在现代JavaScript中优先使用它们。不复杂但容易忽略。










