这是非常基础的题了,几乎在技术面试的时候都会问到,但是一般回答得都不是很全面,现在继续深化总结一下他们的区别。
1.全局污染
通过 var定义的变量,尤其是在全局作用域里定义的变量,它会挂载到全局对象window里。
通过 let定义的变量则不会。
2. 块级作用域
用 var定义的变量只有两种作用域,全局和函数作用域。
用 let定义的变量多了一种 块级作用域
3.TDZ 暂时性死区
var变量存在 变量提升 ,可以在声明前使用,不会报错。
console.log('a',a); //undefined
var a = 1;
let也存在变量提升,但在声明前使用会 报错。即在声明的这一行之前到作用域的顶端,形成暂时性死区。在 暂时性死区 里访问这个变量,则会报错。
4.重复声明
在同个作用域里,使用 var可以重复声明,使用let不能重复声明。