JavaScript中var,let,const区别总结

216 阅读2分钟

每一次面试的时候总会遇到这个问题,但是每一次都说不全面。今天就好好的总结一下♥♥

  • 通过 var 关键词声明的变量没有块作用域。在块 {} 内声明的变量可以从块之外进行访问。

  • 使用 let 关键词声明拥有块作用域的变量,在块 {} 内声明的变量无法从块外访问。

  • 使用 var 关键字重新声明变量会带来问题,在块中重新声明变量也将重新声明块外的变量。

  • 使用 let 关键字重新声明变量可以解决这个问题,在块中重新声明变量不会重新声明块外的变量。

3.循环中:

  • 在循环中使用的变量使用 var 重新声明了循环之外的变量。

  • 在循环中使用的变量使用 let 并没有重新声明循环外的变量。

  • 如果在循环中用 let 声明了变量 i,那么只有在循环内,变量 i 才是可见的。

4.全局变量:

  • 通过 var 关键词定义的全局变量属于 window 对象。

  • 通过 let 关键词定义的全局变量不属于 window 对象。(undefined)

5.声明:

  • 在相同的作用域,或在相同的块中,通过 let 重新声明一个 var 变量是不允许的。

  • 在相同的作用域,或在相同的块中,通过 var 重新声明一个 let 变量是不允许的。

  • 在相同的作用域,或在相同的块中,通过 let 重新声明一个 let 变量是不允许的。

  • 在不同的作用域或块中,通过 let 重新声明变量是允许的。

6.变量提升:

  • 通过 var 声明的变量会提升到顶端。

  • 通过 let 定义的变量不会被提升到顶端。在声明 let 变量之前就使用它会导致 ReferenceError。

  • const 变量不能在声明之前使用。

7.const 与 let:

  • const 定义的变量与 let 变量类似,但不能重新赋值。

  • const 变量必须在声明时赋值。

  • 关键字 const 有一定的误导性。它没有定义常量值。它定义了对值的常量引用。因此,我们不能更改常量原始值,但我们可以更改常量对象的属性。

  • 在同一作用域或块中,不允许将已有的 var 或 let 变量重新声明或重新赋值给 const。

  • 在同一作用域或块中,为已有的 const 变量重新声明声明或赋值是不允许的。

  • 在另外的作用域或块中重新声明 const 是允许的。