Skip to content

ES6

var、let、const

var

  • 作用域:函数作用域,函数中声明为局部变量,函数外声明为全局变量,在全局作用域下会成为 window 的属性
  • 变量提升:存在变量提升,变量可以在声明之前调用,值为 undefined
  • 重复声明:允许在同一作用域中重复声明变量
  • 可修改性:可以修改变量的值

let

  • 作用域:块级作用域,只在 let 命令所在的代码块内有效
  • 变量提升:不存在变量提升,必须先声明后使用
  • 暂时性死区:只要块级作用域内存在 let 命令,该变量就绑定这个区域,不再受外部影响
  • 重复声明:不允许在相同作用域中重复声明
  • 可修改性:可以修改变量的值

const

  • 作用域:块级作用域,只在 const 命令所在的代码块内有效
  • 变量提升:不存在变量提升,必须先声明后使用
  • 暂时性死区:同 let,存在暂时性死区
  • 必须初始化:声明时必须立即初始化
  • 重复声明:不允许在相同作用域中重复声明
  • 可修改性
    • 声明一个只读的常量,一旦声明,常量的值就不能改变
    • 注意const 实际保证的是变量指向的内存地址不可改动
      • 对于基本类型(Number、String 等):值保存在变量指向的内存地址中,等同于常量
      • 对于引用类型(Object、Array 等):变量指向的内存地址保存的是指针,const 只能保证指针固定,不能保证数据结构不变

三者区别总结

特性varletconst
作用域函数作用域块级作用域块级作用域
变量提升存在不可在声明前访问不可在声明前访问
暂时性死区不存在存在存在
重复声明允许不允许不允许
可修改性可修改可修改不可修改(引用类型可修改内部属性)
初始化要求可选可选必须初始化