1. let 有块级作用域,var 没有
2. var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined,但let不会,会报错.
3. 在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”s。ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
4. let不允许在相同作用域内,重复声明同一个变量。const声明的常量,也与let一样不可重复声明
5. 考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。
6. const声明一个只读的常量。一旦声明,常量的值就不能改变。const一旦声明变量,就必须立即初始化,不能留到以后赋值。
6.const的作用域与let命令相同:只在声明所在的块级作用域内有效。
7. let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。