返回

ES6 块级绑定,let、const 声明

前端

在 ES6 中,引入了 let 和 const 来声明变量。这两种声明方式与传统的 var 关键字存在一些区别,更强调变量的作用域和块级作用域。

1. let 声明

let 关键字用于声明变量,与 var 关键字类似,但它只在声明所在块(大括号块)内有效。也就是说,let 声明的变量只能在声明它的块内访问,一旦离开这个块,变量就会被销毁。

// 块级作用域示例
{
  let x = 10;
  console.log(x); // 输出 10
}

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

在这个示例中,变量 x 在块内声明,因此它只能在块内访问。一旦离开块,变量 x 就被销毁,因此在块外访问它会引发 ReferenceError。

2. const 声明

const 关键字用于声明常量,它与 let 关键字相似,但它声明的变量是只读的,一旦声明就不能被重新赋值。

const PI = 3.14;

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

在这个示例中,变量 PI 被声明为常量,因此它不能被重新赋值。试图重新赋值会引发 TypeError。

3. 比较 let、const 和 var

下表比较了 let、const 和 var 关键字的区别:

关键字 作用域 可重新赋值
var 函数级
let 块级
const 块级

4. 何时使用 let 和 const

一般来说,应优先使用 let 和 const 声明变量,除非有特殊需要,才使用 var。

5. 变量提升

使用 var 关键字声明的变量,无论其实际声明位置在何处,都会被视为声明于所在函数的顶部(如果声明不在任意函数内,则视为在全局作用域的顶部)。这就是所谓的变量提升。

console.log(x); // undefined

var x = 10;

在这个示例中,变量 x 在函数内使用,但它实际上是被提升到了函数的顶部。因此,在声明变量之前就可以使用它,但此时它的值为 undefined。

6. 暂时性死区

let 和 const 声明的变量存在暂时性死区(temporal dead zone),这意味着在变量声明之前,不能访问它。

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

let x = 10;

在这个示例中,在声明变量 x 之前访问它会引发 ReferenceError。这是因为 x 在声明之前处于暂时性死区,不能被访问。

7. 块级作用域的优点

块级作用域可以帮助我们避免一些常见的错误,例如变量冲突和意外的全局变量。它还可以使代码更易于阅读和理解。