var的特点
- 没有代码块的概念,全局范围内都有效
- 存在“变量提升”现象,即变量可以在声明之前使用,值为undefined
let的特点
- 声明的变量仅在块级作用域内有效,存在了代码块的概念
- 不存在“变量提升”现象
- 存在暂时性死区,即声明的tmp变量之前,都属于tmp的“死区”
- 不允许重复声明
const的特点
- 一旦给const修饰的标识符被赋值之后,不能修改
const name = 'why';
name = 'abc'; //会报错
- 使用const定义标识符,必须进行赋值
const name; //会报错
- 常量的含义是指向的对象不能修改,但可以改变对象的属性
const obj = { name:'xxx',age:18 }
obj.name='aaa';
obj.age=20; //这样是不会报错的