Tags:let
、const
块级声明:声明在指定块的作用域之外无法访问的变量。
块级作用域存在于:
- 函数内部;
- 块中(字符
{
和}
之间的区域)。
let
声明
-
块级声明:用
let
声明的变量可以把该变量的作用域限制在当前代码块中。 -
没有变量提升机制:
let
声明不会被提升(Hoisting)。 -
禁止重声明:同一个作用域中不能用
let
重复定义已经存在的标识符。
const
声明
- 使用
const
声明的是常量,其值一旦被设定后不可更改。因此,每个通过const
声明的常量必须进行初始化。 -
const
声明不会被提升。 - 同一个作用域中不能用
const
重复定义已经存在的标识符。 -
const
声明不允许修改绑定,但允许修改绑定的值。也就是说,不可以为const
定义的常量再赋值,但是如果const
声明的常量是对象,可以修改该对象的属性值。
循环
在 for-in
和 for-of
循环中,let
和 const
都会每次迭代时创建新绑定,从而使循环体内创建的函数可以访问到相应迭代的值。
⚠️ 在 for
循环中使用 const
声明变量可能会引发错误,除非后续循环中不会修改该变量的值。
全局作用域绑定
如果在全局作用域中使用 let
或 const
,会在全局作用域下创建一个新的绑定,但该绑定不会添加为全局对象的属性。换句话说,用 let
或 const
不能覆盖全局变量,而只能遮蔽它。
// 在浏览器中
let RegExp = "Hello!";
console.log(RegExp); // "Hello!" ,<-- 创建了一个全局变量
console.log(window.RegExp === RegExp); // false <-- 但这个全局变量并不是全局对象 window 的属性
const ncz = "Hi";
console.log(ncz); // "Hi"
console.log("ncz" in window); // false
块级绑定的最佳实践
默认使用 const
,只有确实需要改变变量的值时使用 let
。
网友评论