深入理解ES6:1.块级作用域绑定

2019-10-10  本文已影响0人  独木舟的木

Tags:letconst

块级声明:声明在指定块的作用域之外无法访问的变量。

块级作用域存在于:

let 声明

  1. 块级声明:用 let 声明的变量可以把该变量的作用域限制在当前代码块中。
  2. 没有变量提升机制let 声明不会被提升(Hoisting)。
  3. 禁止重声明:同一个作用域中不能用 let 重复定义已经存在的标识符。

const 声明

  1. 使用 const 声明的是常量,其值一旦被设定后不可更改。因此,每个通过 const 声明的常量必须进行初始化
  2. const 声明不会被提升。
  3. 同一个作用域中不能用 const 重复定义已经存在的标识符。
  4. const 声明不允许修改绑定,但允许修改绑定的值。也就是说,不可以为 const 定义的常量再赋值,但是如果 const 声明的常量是对象,可以修改该对象的属性值。

循环

for-infor-of 循环中,letconst 都会每次迭代时创建新绑定,从而使循环体内创建的函数可以访问到相应迭代的值。

⚠️ 在 for 循环中使用 const 声明变量可能会引发错误,除非后续循环中不会修改该变量的值。

全局作用域绑定

如果在全局作用域中使用 letconst,会在全局作用域下创建一个新的绑定,但该绑定不会添加为全局对象的属性。换句话说,用 letconst 不能覆盖全局变量,而只能遮蔽它。

// 在浏览器中
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

上一篇 下一篇

猜你喜欢

热点阅读