一、共识要点
- 核心定义:闭包是函数与其词法环境(外部作用域变量的引用)的组合体。
- 关键特征:
- 记忆性:能够“记住”并持有外部函数的局部变量。
- 持久性:即使外部函数已经执行完毕(外部作用域已销毁),内部函数依然能够访问这些变量。
- 穿透性:当函数在其定义时的作用域之外被调用时,仍能访问原词法环境中的变量。
二、分歧与需注意
- 表述侧重点差异:
- 部分模型侧重于执行时机(强调“外部函数执行结束后”仍可访问)。
- 部分模型侧重于调用位置(强调在“定义时的作用域之外执行”时仍可访问)。
- 两者表述不同,但本质均指向闭包打破了一般作用域生命周期的限制。
- 需注意:由于闭包会“持有”外部变量,导致这些变量不会被垃圾回收机制回收,实际开发中需注意潜在的内存占用问题。
三、行动项(下一步怎么做)
- 动手验证:用 JavaScript 或 Python 编写一个简单的计数器函数,在外部函数调用完毕后,验证内部函数是否仍能读取并修改外部变量。
- 概念溯源:复习“词法作用域(Lexical Scope)”的定义,理解函数在定义时(而非执行时)如何绑定其外部环境。
- 深入底层:结合垃圾回收(GC)机制,理解闭包导致变量无法回收的底层原理,学习如何手动清理不再需要的闭包引用。