【ES6】let 和 const

let 命令

  • let 只在所在的代码块内有效
  • 变量提升和暂时性死区两节可以总结为:用 let 的时候要先声明后使用(用 var 的时候最好也这样)
  • let 不允许重复声明:在相同作用域内同一个变量名不能重复声明

块级作用域

  • 不明白为什么会有人设计“变量提升”这么蛋疼的特性,先声明再使用不是很好吗?
  • 为什么需要块级作用域?因为“变量提升”会把作用域搞乱
  • let实际上为 JavaScript 新增了块级作用域,比较符合我的认知,var 的作用域太玄幻了,所以尽量用 let 吧
  • 尽量不要在块级作用域内定义函数,如果一定要定义,就使用函数表达式
  • 使用块级作用域注意加大括号,ESLint 应该会帮我们避免这种问题

const 命令

  • const 声明一个只读的常量
  • const 也只在块作用域内生效,没有“提升”
  • 先声明,后使用,很好很规范
  • const 常量指向对象时,对象中的内容仍然可以被改变
  • 如果真的想将对象冻结,应该使用Object.freeze方法

顶层对象的属性

  • ES6 一方面规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性
  • 还是尽量用 let 修饰符

globalThis 对象

  • 一个获取顶层对象的提案,目的是为了方便的在各种环境下通过同一属性取得顶层对象

总结

  • 感觉 ES6 在语言规范方面做出了努力,减少不确定的复杂的用法(例如 var 的变量提升),让语言变得规范统一

你可能感兴趣的:(【ES6】let 和 const)