let的特性:
1、let命令声明变量,用法类似var,但所声明的变量只在let命令所在的代码块之间有效
上图是会报错的,得在{ }中console.log(b) 才可调用
2、let不存在变量提升
在ES5中,var变量会被提升,无块级作用域
像上面控制台会输出a是undefined,因为a的变量被提升到console前面,就是
而在ES6中,使用let变量是不会被提升,而是直接报错,所以在使用let变量一定要先声明再使用变量
3、暂时性死区
在代码块内,使用let声明变量之前,该变量都是不可用的
还是跟第二条是一样的报错,需要先let a ="abc";再console.log()才不会报错。
理解为:如果在区块中存在let和const命令,凡是在声明之前就使用变量,会报错。
4、不允许重复声明
在ES5中,var变量可以重复声明变量,在后面的声明的变量可以覆盖掉前面声明的变量
5、let为JS新增 了块级作用域
6、var挂载在window上,let没有挂载在window上
所以可以总结一下使用let变量有两个优点:
1)内层的变量不会覆盖外层的变量
2)如果是计数,循环变量,也不会将变量泄露成为全局变量
const:定义常量、不允许再次修改赋值