1、区别
1)var 命令会发生变量提升现象,即变量可以在声明之前使用,值为undefined
2)let 和 const 则没有变量声明提升的功能,必须要先声明才能使用
3)var命令能重复声明,后者覆盖前者
4)let 和 const不允许在相同作用域内,重复声明同一个变量
2、作用域
1)var 的作用域是以函数为界限
2)let 和 const 的作用域是块作用域,块级作用域指 { } 内的范围
3)var 可以定义全局变量和局部变量,let 和 const 只能定义局部变量
4)const 的声明的常量不能被修改,但对于引用类型来说,堆内存中的值是可以被改变的
注意:const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于引用类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是可以更改的。