推荐答案
let
和 const
是 ES6 引入的两种新的变量声明方式,它们的主要区别在于:
可变性:
let
声明的变量可以被重新赋值。const
声明的变量不能被重新赋值,且必须在声明时初始化。
块级作用域:
let
和const
都具有块级作用域,意味着它们在声明所在的代码块内有效。
暂时性死区:
let
和const
都存在暂时性死区(Temporal Dead Zone, TDZ),即在声明之前访问变量会抛出ReferenceError
。
本题详细解读
1. 可变性
let
:let
声明的变量可以在声明后重新赋值。例如:let x = 10; x = 20; // 合法
const
:const
声明的变量不能被重新赋值,且必须在声明时初始化。例如:const y = 10; y = 20; // 报错:Assignment to constant variable.
2. 块级作用域
let
和const
:- 两者都具有块级作用域,意味着它们在声明所在的代码块内有效。例如:
if (true) { let a = 1; const b = 2; } console.log(a); // 报错:a is not defined console.log(b); // 报错:b is not defined
- 两者都具有块级作用域,意味着它们在声明所在的代码块内有效。例如:
3. 暂时性死区
let
和const
:- 两者都存在暂时性死区(Temporal Dead Zone, TDZ),即在声明之前访问变量会抛出
ReferenceError
。例如:console.log(c); // 报错:Cannot access 'c' before initialization let c = 10;
- 两者都存在暂时性死区(Temporal Dead Zone, TDZ),即在声明之前访问变量会抛出
4. 其他注意事项
const
与对象:const
声明的变量虽然不能被重新赋值,但如果变量是一个对象,对象的属性可以被修改。例如:const obj = { a: 1 }; obj.a = 2; // 合法 obj = {}; // 报错:Assignment to constant variable.
let
与var
的区别:let
和const
都具有块级作用域,而var
具有函数作用域。var
声明的变量会提升到函数或全局作用域的顶部,而let
和const
不会。
通过以上分析,可以清晰地理解 let
和 const
的区别及其使用场景。