let、const和var的区别
- 前两个声明后是在一个块级作用域下(通常是{}或函数内)
- var存在变量提升而let和const一个变量在当前块之前是无法调用,会存在一个暂时性的死区(TDZ)
- 在全局作用域下 var声明赋值会额外在window下声明或覆盖同名变量的值; 而let和const并不会修改window下的同名变量
- 在for for-in for-of等循环中 let和const每次迭代都创建新绑定并且只在{}内有效,而var声明的变量在外部(同级作用域)也有效
tips:块级绑定的最佳实践:默认使用const,只有确实需要改变变量的值时使用let。因为大部分变量的值在初始化后不应该再改变,而预料之外的变量值的改变是很多bug的源头。