var,let,const之间有什么区别

108 阅读2分钟

var

  • 用var声明的变量即是全局变量也是顶层变量,顶层对象指的是window对象
  • 使用var声明的变量存在变量提升的情况
  • var能够对一个变量进行多次声明,后面的变量会覆盖前面得病了
  • 函数中使用var变量,该变变量是局部的
  • 不在函数中使用该变量,该变量是全局的

let

  • let变量只在let命令代码块内有效
  • 不存在变量提升
  • 只要块级作用域内存在let指令,这个区域就不会熟外界的影响
  • let不允许重复声明变量
  • 不能在函数内重复声明变量

const

  • const声明一个只读的变量,一旦声明常量的值就不能改变
  • const一旦声明变量,就必须立即初始化,不能留到以后赋值
  • 如果之前智勇了var,let声明变量,const声明变量会报错
  • const实际上保证的是并不是变量的值不得改动,而是变量指向的那个指向的那个内存地址锁保存的数据不得改动
  • 对于简单数据类型而言,值就保存在变量指向的那个内存地址,因此就是常量
  • 对于复杂类型数据,变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的,并不能保证变量的结构不变

他们之间的区别

  • var存在变量提升,let,const不存在
  • var不存在暂时性死区,let,const存在暂时性死区,只有等到声明变量的那一行代码出现,才可以获取和使用该
  • var不存在块级作用域,let,const存在
  • var允许重复声明变量,let,const不允许
  • var,let可以重复修改遍历,const不可以