let:声明变量
const:声明只读常量
二者共同点:
- 只在代码块内有效,并且在用let或const声明之前,都是TDZ(temporal dead zone),暂时性死区,会报错
- 没有变量提升
- 不允许重复声明
这使得ES6存在块级作用域,私有作用域的语法可以丢弃了,允许在块级作用域中声明函数,但是环境导致的行为差异大,所以尽量避免。
const:
const定义对象,保存的地址不可变,但地址的内容可变,所以可给对象添加方法、属性。
若想将对象冻结,使用Object.freeze({});
全局对象的属性:var命令和function命令声明的全局变量,依旧是全局对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于全局对象的属性。