var|let|const

140 阅读2分钟

1.指针指向与等号赋值

首先不管是题目中的那个关键字,他们在声明变量的时候都经历了三大步骤:

  • 先创建值
  • 再创建变量
  • 通过指针将二者进行关联

2.ES6中let和const的区别

let创建的是变量,而const创建的是常量,在此不要让一些文章所迷惑,此处的常量并非一成不变的常量。

  • 从第一个角度说,变量指的是进行值与变量之间的指针的指向可以修改,也就是当前的变量可以指向其他的值,不会在一棵树上吊死。
  • 从第二个角度说,常量指的是当前的指针指向不可以再修改了,但是,创建的值的内容是可以改的,比如此时的值是一个对象,以堆的方式存储,那么这堆里面的内容是可以改的,不管变量内容变成啥样,指针都不会改变其指向。

3.ES5和ES6之间的区别

  • LET等新语法规范不存在变量提升,所以不能在申明之前使用。
  • LET等新语法规范解决了暂时性死区的问题,用var声明变量之前基于typeof检测不会报错,输出undefined,而在let声明变量之前用typeof检测会报错
  • 在全局上下文中,基于LET声明的全局变量和全局对象GO(window)没有任何关系,而var和声明的变量和GO(window)存在映射机制。
  • LET不允许重复声明变量,var比较灵活,重复声明即是指针指向不同的地址。
  • ES6新语法中存在块级作用域。LET/CONST/FUNCTION会把判断等存在大括号作为块级作用域。