JavaScript—作用域、闭包

103 阅读1分钟

一、作用域

1. 什么是作用域?

  • 一套确定在何处以及如何查找变量的规则
    • 以=为界,左边为容器,右边为值
    • LHS:根据值找容器,如变量赋值
    • RHS:根据容器找值,如调用函数,使用变量
  • 词法作用域
    • 定义在词法阶段的作用域

2. 什么是作用域链?

  • 查询变量会首先在自己的作用域中查找,如果没有查找到,回再向上一级查找,查找过程形成的链条就是作用域链

二、闭包

1. 什么是闭包?

  • MDN:闭包是由函数以及声明该函数的词法环境组合而成的
  • 产生:函数可以记住并访问所在的词法作用域时产生
  • 作用:阻止垃圾回收器对不再使用的内存的回收,函数可以在自己的词法作用域外被使用

2. 为什么会有闭包?

3. 闭包的常见使用场景

  • 使用了回调函数就是在使用闭包
  • 定时器
  • 事件监听器
  • Ajax请求
  • 防抖
  • 模块

4. 闭包的优缺点

  • 优点
    • 避免过度使用全局变量,防止全局变量污染
  • 缺点
    • 一直保留这闭包会对内存造成持续消耗,继而影响处理速度,代码性能