JS知识点4
1. let、const、var 的区别
-
let 和 const
- let 声明一个变量,变量存储可以改值
- const 声明变量,一旦赋值,则不能再和其他值进行关联(指针不允许重新指向)
-
let 和 var
- var 存在变量提升,而 let 不存在
- "在全局上下文中",基于var声明的变量,也相当于给GO(全局对象 window)新增一个属性,并且任何一个值发生改变,另一个也会跟着改变(映射机制);但是基于let声明的变量,就是全局变量,和GO没有任何关系
- 在相同的上下文中,let 不允许重复声明(无论基于何种方式声明),而var无所谓,反正浏览器只按照声明一次处理
- 暂时性死区【浏览器暂存的BUG】(基于typeof检测一个未被声明的变量不会报错,结果是undefined)
- let/function/const会产生块级私有上下文,而var是不会的
变量提升: 在当前上下文,代码执行执勤啊,会把所有带 'var/function' 关键字的进行提前的声明或者定义
- 带 'var' 的只是提前声明
- 带 'function' 的是声明加定义
在代码执行之前,浏览器会处理很多事情:词法分析、变量提升,在词法分析阶段,如果基于let/const且重复声明,则直接报语法错误,整个代码都不会做任何执行
上下文 & 作用域:
- 全局上下文
- 函数形成的私有上下文
- 块级作用域(块级私有上下文)
- 除了 对象/函数...的大括号以外(例如:判断体、循环体、代码块...)都可能会产生块级上下文