返回

ES6 拾遗系列:让 JavaScript 更强大且易用的 let 和 const

前端

在 ES6 之前,JavaScript 中只有 var 一种方式来声明变量。使用 var 声明变量存在以下问题:

  • 允许重复的变量声明。这意味着可以在同一个作用域内多次声明同一个变量,并且每次声明都会创建一个新的变量,这可能会导致意外的结果。
  • var 声明的变量具有函数作用域。这意味着变量只能在声明它的函数及其内部嵌套函数中使用。如果在一个函数内声明一个变量,则该变量在函数外是不可访问的,这可能会导致代码的可读性和可维护性降低。

为了解决这些问题,ES6 引入了 let 和 const 。let 和 const 具有更严格的规则和更清晰的作用域,从而使代码更易读、更易维护。

let

let 关键字用于声明块级作用域的变量。这意味着使用 let 声明的变量只能在声明它的块及其内部嵌套块中使用。如果在一个块内声明一个变量,则该变量在块外是不可访问的。

{
  let x = 10;
  console.log(x); // 10
}

console.log(x); // ReferenceError: x is not defined

在上面的代码中,变量 x 在块内声明,因此它只能在块内使用。在块外访问变量 x 会抛出一个 ReferenceError 异常。

let 声明的变量具有以下特点:

  • 可以重复声明,但每次声明都会创建一个新的变量。
  • 具有块级作用域。
  • 声明时必须初始化。

const

const 关键字用于声明常量。常量一旦声明就不能被重新赋值。

const PI = 3.1415926;

PI = 3.14; // TypeError: Assignment to constant variable.

在上面的代码中,常量 PI 被声明为 3.1415926。一旦声明,PI 的值就不能被重新赋值。尝试重新赋值会抛出一个 TypeError 异常。

const 声明的常量具有以下特点:

  • 不能重复声明。
  • 具有块级作用域。
  • 声明时必须初始化。

let 和 const 与 var 的区别

下表总结了 let、const 和 var 三种变量声明方式的区别:

特性 var let const
作用域 函数级 块级 块级
重复声明 允许 允许(但每次声明都会创建一个新的变量) 不允许
声明提升
初始化 不需要 必须 必须
重新赋值 允许 允许 不允许

何时使用 let 和 const

在大多数情况下,应该使用 let 而不是 var 来声明变量。let 具有更严格的规则和更清晰的作用域,从而使代码更易读、更易维护。

const 应该用于声明那些不需要被重新赋值的变量,例如常量和只读数据。

结语

let 和 const 是 ES6 中引入的两个新的变量声明方式。它们具有更严格的规则和更清晰的作用域,从而使代码更易读、更易维护。在大多数情况下,应该使用 let 而不是 var 来声明变量。const 应该用于声明那些不需要被重新赋值的变量,例如常量和只读数据。