# 被误解的闭包

By [xiulin](https://paragraph.com/@xiulin) · 2022-10-11

---

js 中的闭包是一个非常强大的特性，但是人们对其也有诸多误解。一种耸人听闻听闻的说法是闭包会造成内存泄漏，所以要尽量减少闭包的使用。

局部变量本来应该在函数退出的时候被解除引用，但如果局部变量被封闭在闭包形成的环境中，那么局部变量就能一直生存下去。从这个意义上来看，闭包的确会使一些数据无法及时被销毁。使用闭包的一部分原因是我们选择主动把一些变量封闭在闭包中，因为可能在以后还要使用这些变量，把这些变量放在闭包中和放在全局作用域对内存的影响是一致的。这里并不能说成是内存泄漏。如果将来需要回收这些变量，手动把这些变量设为null就可以了。

内存泄漏跟闭包有关系的地方是，使用闭包的同时比较容易形成循环引用，如果闭包的作用域链中保存着一些dom节点，这时候可能造成内存泄漏。但这本身并非是闭包的问题，也不是js的问题。在基于引用计数的垃圾回收机制中，如果两个对象之间形成了循环引用，那么这两个对象都无法被回收，但循环引用造成的内存泄漏在本质上也不是闭包造成的。

摘自Javascript设计模式与开发实践 / 曾探

---

*Originally published on [xiulin](https://paragraph.com/@xiulin/2beT4I3CgVRCxfyDqNKO)*
