在闭包中使用“self”会导致内存泄漏吗?
Could using 'self' inside a closure lead to a memory leak?
如果我在一个对象中有一个函数(在我的例子中是一个骨干模型)...
doIt: function () {
var self = this,
result = null;
this.doMagic(function(){
result = self.doWizardry();
});
self = null;
return result
}
。我是否需要像在这里所做的那样将 self 设置为 null,以避免内存泄漏?
奖励问题,关闭对"结果"的引用也会导致内存泄漏吗?
任何关于提高此类结构效率的建议将不胜感激!
(希望很明显这不是一个真正的函数,只是说明性的)
谢谢!
No. 事实上,在调用 this.doMamgic()
之前将 self
设置为 null
也会破坏变量self
,这样this.doMagic()
将无法使用它,因为当this.doMagic()
稍后实际尝试使用它时,它的值将被清除。
Javascript中的自引用本身不会导致内存泄漏。 GC 足够智能,可以检测到这一点。 如果其他 JS 无法访问整个对象,则对象在对象中对自身有多少引用并不重要。
我在此代码中没有看到为什么使用变量 self
会导致内存泄漏的特殊原因,并且执行这样的事情是一种成熟的模式,用于存储回调可以使用的状态(就像您尝试做的那样)。
至于一般建议,doIt()
函数的重点看起来有问题。 您似乎正在尝试返回由 this.doMagic()
设置的 result
值,但在执行时没有调用this.doMagic()
doIt()
,因此result
在返回时永远不会有值doIt()
。
因此,整个结构似乎有缺陷。 要知道要推荐什么,需要了解您要完成的任务以及您如何调用/使用此尚未披露的代码。
相关文章:
- 重复应用 d3 转换导致的内存泄漏
- IE7中的blockUI插件内存泄漏25kb
- Javascript闭包-如何防止内存泄漏
- jQuery Draggable:内存泄漏
- "检测到可能的EventEmitter内存泄漏”;使用Gulp+Watchify+Factor捆绑包
- 在Dojo类中递归调用setTimeout时是否存在内存泄漏
- 是内存泄漏
- 将处理程序留在img.onload上是内存泄漏
- 具有并发sse连接的node.js内存泄漏
- 简单对象的Javascript内存泄漏
- WeakMap是否会将我从父/子关系的内存泄漏中拯救出来
- Javascript绘制画布内存泄漏
- Node.js”;检测到EventEmitter内存泄漏”;
- 正在清理内存泄漏
- 递归Javascript对象是否会导致任何问题(内存泄漏)
- Angular JS$编译服务导致$watch内存泄漏
- 如何防止和防范闭包内存泄漏
- 跟踪 JavaScript 内存泄漏的工具
- 页面刷新后javascript内存泄漏有问题吗?为什么?
- XMLHttpRequest循环内存泄漏