如果我在对象中有一个函数(在我的情况下是一个Backbone模型)......
doIt: function () {
var self = this,
result = null;
this.doMagic(function(){
result = self.doWizardry();
});
self = null;
return result
}
...为了避免内存泄漏,我是否需要将self设置为null,以避免内存泄漏?
奖金问题,关闭是否会引用'结果'导致内存泄漏?
非常感谢任何有关提高此类结构效率的建议!
(希望很明显,这不是一个真正的功能,只是说明性的)
谢谢!
答案 0 :(得分:1)
没有。实际上,在调用self
之前将null
设置为this.doMamgic()
也会破坏变量self
,以致this.doMagic()
将无法使用它,因为它当this.doMagic()
实际上试图在以后使用它时,该值将被清除。
Javascript中的自引用本身并不会导致内存泄漏。 GC非常智能,可以检测到它。如果其他JS无法访问整个对象,那么对象在对象内部有多少引用并不重要。
我认为在这段代码中没有特别的原因为什么使用变量self
会导致内存泄漏,并且做这样的事情是一个完善的模式,用于存储回调可以使用的状态(就像你'一样)重新尝试)。
至于一般建议,doIt()
函数的要点看起来有问题。您似乎正在尝试返回result
设置的this.doMagic()
值,但在this.doMagic()
执行时未调用doIt()
,因此result
将永远不会在doIt()
返回时有一个值。
所以,整个结构看起来都有缺陷。要知道要推荐什么,需要了解您要完成的工作以及如何调用/使用您尚未披露的代码。