1、多次申明
var多次申明。后续申明会被忽略 (这个要注意另外一个问题。函数申明的优先级高于变量申明,因此如果同时存在同名函数申明和变量申明。变量申明会被忽略。)
let、const多次申明会报错 (already been declared)
2、使用范围
var申明变量可以在申明之前使用,值为undefined(申明提前)
let、const申明变量存在暂时性死区(TDZ),也就是在申明之前不能使用(即使是typeof操作),使用则会抛错。(Cannot access ‘xx’ before initialization)
3、生效的范围
var 申明只在函数内和全局范围内生效,也就是说var申明变量只有函数作用域和全局作用域。
let、const存在块作用域 ,也就是{}内部的申明外部无法访问,因为这个变量只存在于{}内部。