ES6 块级绑定,let、const 声明
2023-10-01 07:25:50
在 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. 块级作用域的优点
块级作用域可以帮助我们避免一些常见的错误,例如变量冲突和意外的全局变量。它还可以使代码更易于阅读和理解。