var、let、const三者的区别

javaScript

随着ES6规范的到来,Js中定义变量的方法已经由单一的 var 方式发展到了 var、let、const 三种之多。它和其他2种有什么区别呐?

区别点
  1. var可以重复声明,let、const不可以
  2. var没有块级作用域,let、const有块级作用域
  3. var会发生变量提升现象,let、const不存在变量提升
  4. var不存在暂时性死区问题,let、const存在暂时性死区
  5. const声明时必须要带值,不然会报错
暂时性死区

只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

const本质

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。

参考文章

let 和 const 命令
我用了两个月的时间才理解 let