返回

细说var、let和const

前端

在ECMAScript中,有3个可以用于声明变量。分别是:var、let和const。其中,var是ES5中的变量声明关键字,而let和const是ES6中引入的新关键字。这3个关键字在用法和语义上都有所不同。

1. var

var是ES5中的变量声明关键字。使用var声明的变量具有以下特点:

  • 变量声明提升:在执行代码之前,会先将var声明的变量提升到当前作用域的最顶部。
  • 函数作用域:var声明的变量的作用域是函数作用域。这意味着,变量只能在声明它的函数内部访问。
  • 全局变量:如果var声明的变量没有在函数内部声明,则该变量会成为全局变量。这意味着,该变量可以在任何地方访问。

2. let

let是ES6中引入的新变量声明关键字。使用let声明的变量具有以下特点:

  • 块级作用域:let声明的变量的作用域是块级作用域。这意味着,变量只能在声明它的块(例如,函数、循环体、条件语句块)内部访问。
  • 暂时性死区:在let声明的变量之前,该变量是不可访问的。这被称为暂时性死区。
  • 不允许重复声明:在同一个块中,不能重复声明同一个变量名。

3. const

const也是ES6中引入的新变量声明关键字。使用const声明的变量具有以下特点:

  • 常量:const声明的变量是常量,这意味着该变量的值一旦被初始化,就无法被改变。
  • 块级作用域:const声明的变量的作用域是块级作用域。
  • 不允许重复声明:在同一个块中,不能重复声明同一个变量名。

总结

下表总结了var、let和const这3个关键字的区别:

特性 var let const
作用域 函数作用域 块级作用域 块级作用域
变量提升
暂时性死区
重复声明 允许 不允许 不允许
常量

应用场景

var、let和const这3个关键字在不同的场景下都有各自的应用场景。

  • var:当需要声明全局变量或函数作用域内的变量时,可以使用var。
  • let:当需要声明块级作用域内的变量时,可以使用let。
  • const:当需要声明常量时,可以使用const。

例如,以下代码声明了一个全局变量:

var x = 1;

以下代码声明了一个函数作用域内的变量:

function foo() {
  var y = 2;
}

以下代码声明了一个块级作用域内的变量:

if (true) {
  let z = 3;
}

以下代码声明了一个常量:

const PI = 3.14;

注意事项

在使用var、let和const这3个关键字时,需要注意以下几点:

  • 不要在块级作用域内使用var声明变量,因为这可能会导致意外的错误。
  • 不要重复声明同一个变量名,因为这会引起语法错误。
  • 不要试图修改const声明的变量的值,因为这会引起TypeError异常。