let 和 const 与 var 的区别
1、不存在变量提升
必须先定义后使用,否则报错
2、暂时性死区
在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
3、不允许重复申明/不允许在函数内部重新申明参数(也算重复申明)
4.1 SE5的作用域
1)、内层变量覆盖外层的变量
2)、用来计数的循环变量会泄露为全局变量
5、const是一个常量,一旦声明,就不能改变。而且在申明的时候必须初始化,不能留到后面赋值。
6、在ES5里面,var 在全局作用域下申明的变量,会自动生为window的属性:
没法在编译过程爆出变量为申明的错误,语法上顶层对象有一个实体含义的对象这样肯定不合适。
用var定义的依然会升级为顶层对象(全局对象)window的属性;但是let,const申明则不会。