(let / const )VS var
- let 不存在变提升,不允许在定义之前使用,
- 否则会报错:
Uncaught ReferenceError:Cannot access 'x' before initialization
。
- 否则会报错:
- let不允许重复声明,不论当前上下文中,基于何种方式声明过这个变量,都允许再基于let声明。
- 否则报错:
Uncaught ReferenceError: Identifier 'x' has already been declared
。 - 此操作在词法解析阶段完成的,一旦报错,所有的代码都不执行。
- 否则报错:
- let会产生块级上下文。
- let会产生暂时性死区问题。
- 基于
typeof
检测一个未被声明的变量,返回undefined
。 - 词法解析阶段,如果let声明的变量,在声明前使用该变量,会报错,阻断整个JS代码。
- 基于
- 在全局上下文中。
- 基于 var / function 声明的变量,是给 window(GO)设置的全局属性。
- 基于 let / const 声明的变量是放在 VO(G) 中的,和 GO 没有任何关系。
const VS var
- 基于const声明的变量
- 必须定义初始值。
- 且不允许更改指针指向。
- 但是指针内容可以改变。
- 避免使用const声明引用类型值。