三者都是声明变量,区别主要有四点:
- 作用域:
var是函数作用域,let/const是块级作用域({}内有效); - 提升:
var声明提升并初始化为undefined;let/const也提升但存在「暂时性死区」,声明前访问会抛ReferenceError; - 重复声明:
var允许,let/const不允许; - 赋值:
const声明时必须初始化且不能重新赋值,但对象的属性仍可修改(绑定不可变,值可变)。
console.log(a); // undefined
var a = 1;
console.log(b); // ReferenceError(暂时性死区)
let b = 2;
易错点:const 不等于「常量对象」,想冻结对象要用 Object.freeze。实践建议:优先 const,需要重新赋值再用 let,避免 var。追问:var 挂载到全局对象(window.x)而 let/const 不挂载;for 循环中 let 每次迭代创建新绑定的机制。