基础-let和var的区别

60 阅读1分钟

这是非常基础的题了,几乎在技术面试的时候都会问到,但是一般回答得都不是很全面,现在继续深化总结一下他们的区别。

1.全局污染

通过 var定义的变量,尤其是在全局作用域里定义的变量,它会挂载到全局对象window里。

image.png

通过 let定义的变量则不会。

image.png

2. 块级作用域

var定义的变量只有两种作用域,全局函数作用域。 用 let定义的变量多了一种 块级作用域

3.TDZ 暂时性死区

var变量存在 变量提升 ,可以在声明前使用,不会报错。

  console.log('a',a); //undefined
  var a = 1;

let也存在变量提升,但在声明前使用会 报错。即在声明的这一行之前到作用域的顶端,形成暂时性死区。在 暂时性死区 里访问这个变量,则会报错。

4.重复声明

在同个作用域里,使用 var可以重复声明,使用let不能重复声明。