1.var声明的范围是函数作用域,let声明的范围是块作用域,const声明的范围是块作用域
2.var声明的变量会自动提升到函数作用域顶部,而let不会
3.var在全局作用域中声明的变量会成为window对象的属性,而let不会
4.条件声明,var声明时会被提升,JavaScript会自动将多余的声明在作用域顶部合并为一个声明。而let的作用域是块,所以不能检查到前面是否已经使用let声明过同名变量。
5.for循环中var定义的变量,经过迭代,会渗透到循环体外部。let就不会
6.const声明时必须同时初始化变量,且尝试修改const声明的变量会导致运行时错误。也不可以重复声明
目前
1.不使用var
2.const优先,let次之