var
1、var 声明的变量在全局内有效
2、可以重复声明
3、var 声明的变量存在变量提升
let
1、遇到{}可开启块级作用域
2、不能重复声明--- 可以防止变量重复定义产生的冲突,会直接报错
3、let 声明的变量不存在变量提升
const
1、const 声明的常量是一个只读属性,必须初始化
2、遇到{}可开启块级作用域
3、不能重复声明
4、不存在变量提升
5、const 定义的基本数据类型不可以修改,但复杂数据类型可以修改
原因: const 指针指向的地址是不可以改变的,但地址指向的内容是可以改变的