let var const 定义变量

31 阅读1分钟

var:

  1. 不存在块级作用域,if else 中的 {} 中用var定义的变量,{} 外也能使用,但存在函数作用域。
  2. 存在变量提升,即var定义的变量有声明和赋值两个步骤,声明会被提升到当前作用域的顶层且会被赋值为undefined,在声明和赋值的中间过程,访问变量会得到undefined,不会报错。
  3. 全局作用域中var定义的变量实际是挂在了window下。
  4. 允许重复声明

let:

  1. 存在块级作用域 {}
  2. 不存在变量提升,有暂时性死区这个概念。可以理解为let定义的变量也存在声明和赋值两个步骤,但不会被赋值为undefined,在声明和赋值的中间过程,访问变量会报错。
  3. 不允许重复声明

const

  1. 与let类似,有以下两点不同
  2. 声明时必须赋值,否则会报错
  3. 赋值后,如果是基本数据类型,则不可更改,如果是引用类型,则数据可以更改,但地址不可更改。