一、作用域
1. 什么是作用域?
- 一套确定在何处以及如何查找变量的规则
- 以=为界,左边为容器,右边为值
- LHS:根据值找容器,如变量赋值
- RHS:根据容器找值,如调用函数,使用变量
- 词法作用域
- 定义在词法阶段的作用域
2. 什么是作用域链?
- 查询变量会首先在自己的作用域中查找,如果没有查找到,回再向上一级查找,查找过程形成的链条就是作用域链
二、闭包
1. 什么是闭包?
- MDN:闭包是由函数以及声明该函数的词法环境组合而成的
- 产生:函数可以记住并访问所在的词法作用域时产生
- 作用:阻止垃圾回收器对不再使用的内存的回收,函数可以在自己的词法作用域外被使用
2. 为什么会有闭包?
3. 闭包的常见使用场景
- 使用了回调函数就是在使用闭包
- 定时器
- 事件监听器
- Ajax请求
- 防抖
- 模块
4. 闭包的优缺点
- 优点
- 避免过度使用全局变量,防止全局变量污染
- 缺点
- 一直保留这闭包会对内存造成持续消耗,继而影响处理速度,代码性能