JavaScript 闭包都会内存泄露吗?

最近看了一些 JavaScript 的内存泄露问题,看似没问题的代码原来存在内存泄露,而且部分还不知道怎么回事,比如: function (element,a,b){ element.onclick = function(){ //TODO a b here } } 这个就造成内存泄露了? 那如果element改为一个非DOM对象也是一样吗? 如果是的话,凡是闭包都会出现内存泄露?通过element.onclick = null可以解决?
关注者
153
被浏览
16135

14 个回答

这个不叫「内存泄漏」。

这个代码运行之后,只要 element 不再被引用,a、b 也会被回收。题主的意图估计是希望 a、b 的生命周期比 element 短。那是你的设计错误。因为你把 element 的一个 event-handler 设计成依赖于 a、b,那 a、b 当然就要和 element 共生死了。题主给的这个逻辑用不用闭包都会有这个问题。如果硬要释放 a、b,那就是 release before use,会造成 null-dereference error。
内存泄漏和内存使用这两个概念搞清楚?