可以使用' self'封闭内导致内存泄漏?

时间:2015-01-25 19:24:23

标签: javascript backbone.js memory-leaks

如果我在对象中有一个函数(在我的情况下是一个Backbone模型)......

doIt: function () {
    var self = this,  
        result = null;

    this.doMagic(function(){
        result = self.doWizardry();
    });    

    self = null;

    return result
}

...为了避免内存泄漏,我是否需要将self设置为null,以避免内存泄漏?

奖金问题,关闭是否会引用'结果'导致内存泄漏?

非常感谢任何有关提高此类结构效率的建议!

(希望很明显,这不是一个真正的功能,只是说明性的)

谢谢!

1 个答案:

答案 0 :(得分:1)

没有。实际上,在调用self之前将null设置为this.doMamgic()也会破坏变量self,以致this.doMagic()将无法使用它,因为它当this.doMagic()实际上试图在以后使用它时,该值将被清除。

Javascript中的自引用本身并不会导致内存泄漏。 GC非常智能,可以检测到它。如果其他JS无法访问整个对象,那么对象在对象内部有多少引用并不重要。

我认为在这段代码中没有特别的原因为什么使用变量self会导致内存泄漏,并且做这样的事情是一个完善的模式,用于存储回调可以使用的状态(就像你'一样)重新尝试)。


至于一般建议,doIt()函数的要点看起来有问题。您似乎正在尝试返回result设置的this.doMagic()值,但在this.doMagic()执行时未调用doIt(),因此result将永远不会在doIt()返回时有一个值。

所以,整个结构看起来都有缺陷。要知道要推荐什么,需要了解您要完成的工作以及如何调用/使用您尚未披露的代码。

相关问题