推荐答案
在 JavaScript 中,let 和 const 都引入了块级作用域的概念。块级作用域是指变量在声明它们的块(通常是由 {} 包围的代码块)内有效,超出这个块就无法访问。
let:用于声明一个块级作用域的变量,变量的值可以被重新赋值。const:用于声明一个块级作用域的常量,常量的值在声明后不能被重新赋值。
示例代码
// www.javascriptcn.com code example
if (true) {
let a = 10;
const b = 20;
console.log(a); // 输出 10
console.log(b); // 输出 20
}
console.log(a); // 报错:a is not defined
console.log(b); // 报错:b is not defined本题详细解读
块级作用域的定义
块级作用域是指变量在声明它们的块(通常是由 {} 包围的代码块)内有效,超出这个块就无法访问。这与 var 的函数作用域不同,var 声明的变量在整个函数内都有效。
let 的特性
- 块级作用域:
let声明的变量只在声明它的块内有效。 - 可重新赋值:
let声明的变量可以在声明后重新赋值。 - 暂时性死区:在块级作用域内,
let声明的变量在声明之前是不可访问的,这被称为暂时性死区(Temporal Dead Zone, TDZ)。
const 的特性
- 块级作用域:
const声明的变量只在声明它的块内有效。 - 不可重新赋值:
const声明的变量在声明后不能被重新赋值。如果尝试重新赋值,会抛出错误。 - 必须初始化:
const声明的变量必须在声明时初始化,否则会抛出错误。 - 暂时性死区:与
let类似,const声明的变量也存在暂时性死区。
示例代码分析
// www.javascriptcn.com code example
if (true) {
let a = 10;
const b = 20;
console.log(a); // 输出 10
console.log(b); // 输出 20
}
console.log(a); // 报错:a is not defined
console.log(b); // 报错:b is not defined在这个例子中,a 和 b 都是在 if 语句的块级作用域内声明的。因此,在 if 语句块外访问 a 和 b 会导致错误,因为它们已经超出了作用域范围。
总结
let和const都引入了块级作用域的概念。let声明的变量可以重新赋值,而const声明的变量不能重新赋值。- 两者都存在暂时性死区,即在声明之前不可访问。