很多人对闭包的印象停留在:函数套函数、能访问外部变量、会造成内存泄漏。
但这些都只是表象,闭包的本质,是 JS 保留作用域上下文的能力。
一、闭包到底是什么
当内部函数被带出定义它的外部作用域执行时,依然能访问原作用域的变量,这个被保留的作用域就是闭包。
它不是语法,是引擎天生的行为。
二、它真正的价值
- 封装私有变量,避免全局污染
- 实现模块化,隔离作用域
- 保存执行上下文,用于防抖、节流、柯里化
三、关于内存泄漏的真相
闭包本身不会泄漏,不再使用的引用没有被释放才会泄漏。
只要解除引用,垃圾回收机制就能正常回收。
结语
闭包不是坑,是 JS 模块化与函数式编程的基石。
理解它,才算真正理解 JS 的作用域与生命周期。