var,let,const之间有什么区别
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不可以