JS基础(四)

150 阅读1分钟

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且重复声明,则直接报语法错误,整个代码都不会做任何执行

上下文 & 作用域:

  • 全局上下文
  • 函数形成的私有上下文
  • 块级作用域(块级私有上下文)
    • 除了 对象/函数...的大括号以外(例如:判断体、循环体、代码块...)都可能会产生块级上下文