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