var
- 变量提升 let和const不存在变量提升
- 没有局部作用域(最接近的函数作用域)
- 声明覆盖(重复赋值)const和let不允许重复声明变量。
- var定义以后可以被修改,不初始化输出unidefined,let未定义会报错
let
- 用域是最接近的块作用域
const
- 声明的变量必须赋值
- 支持let的其他属性
- 定义的值不能修改(并不是变量的值不能改动,是变量指向的内存地址不能改动)
对于引用类型的数据(对象或数组,内存地址指向的是指针)不能直接修改 arr=[ ] 或 obj={ }
可以修改里面的属性,如 obj.a=.....