var
- 声明提升但赋值不提升
- var声明的变量没有块级作用域的概念
- var可以重复声明同名变量,但后者会覆盖前者
let
- let声明的变量不会提升,在声明前使用无效
- let有块级作用域,只能在当前作用域内使用
- let不能重复声明变量
const
- 使用const声明的是常量,即定义后不能修改的值(这并不意味着他的值是死的,只不过是不能修改而已,也就是说,用const定义一个函数,这个函数的结果是可能会变的,但是这个函数名不变)
- const在定义的时候就要赋值,并且不能改动
- const也有块级作用域,只对当前代码块有效
- const也没有变量提升,也不能在当前作用域重复声明同一变量