let特点:有作用域的变量
const特点:常量
块级作用域:
在ES6中在{}内定义的变量{}外无法访问,其子集可以访问;
然而var无法达到这种效果;
因此有了 let和const;
当js引擎扫描代码时:
1.var声明:变量声明整体提升
2.let声明:将a放到TDZ当中
3.如果使用的变量在TDZ中,就会报错
4.当let变量被赋值时将变量从TDZ中拿出
let:变量
let的特点是不会变量提升,而是被所在当前块中
先声明,在访问是let的唯一正确的使用方法
const:常量
声明常量,一旦声明,不可更改,而且常量必须初始化赋值
const虽然是常量,不允许修改默认赋值,但是如果定义的是对象Object,那么可以修改对象内部的属性值包括新增删除键值对也是可以的
let和const异同:
相同点:const和let都在当前块内有效区,执行到块外会被销毁,也不存在变量提升,不能重复声明
不同点:const不能再赋值,let声明的变量可以重复赋值
实践:
在开发过程中,选择var、let还是const,取决于我们的变量是不是需要更新,通常我们希望变量保证不被恶意篡改,而使用大量的const,声明一个对象的时候,也推荐使用const,当你需要修改声明的变量值时,使用let,var能用的场景都可以使用let替代