Skip to content

let和const

默认使用 const,只有当确实需要改变变量的值的时候才使用 let。这是因为大部分的变量的值在初始化后不应再改变,而预料之外的变量的修改是很多 bug 的源头。

js
// bad
var foo = 'bar';

// good
let foo = 'bar';

// better
const foo = 'bar';

块作用域

  • 通过 var 关键词声明的变量没有块作用域。

  • 在块 {} 内声明的变量可以从块之外进行访问。

  • 通过 var 关键词定义的全局变量属于 window 对象,可以用window.访问

  • 允许在程序的任何位置使用 var 重新声明 JavaScript 变量

  • 使用 let 关键字重新声明变量可以解决这个问题。

  • 在块中重新声明变量不会重新声明块外的变量

  • 在块作用域内使用 const 声明的变量与 let 变量相似。

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

  • 您可以更改、添加常量对象的属性,但是您无法重新为常量对象赋值

  • 您可以更改常量数组的元素,但是您无法重新为常量数组赋值

提升

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

您可以在声明变量之前就使用它:

js
// 在声明之前,您可以使用 carName
var Name;
  • 通过 let 定义的变量不会被提升到顶端。

在声明 let 变量之前就使用它会导致 ReferenceError。

变量从块的开头一直处于“暂时死区”,直到声明为止:

  • 通过 const 定义的变量不会被提升到顶端。

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