Javascript 了解nodejs中的内存泄漏和闭包

Javascript 了解nodejs中的内存泄漏和闭包,javascript,node.js,memory,memory-leaks,closures,Javascript,Node.js,Memory,Memory Leaks,Closures,我目前正在研究为什么我们的nodejs应用程序会泄漏内存。我不是一个非常熟练的nodejs程序员(我通常与C#一起工作),所以我正在尽可能多地阅读关于这个主题的文档,以找到原因和解决方案 并且教会了我关闭的危险。我们的代码中充满了闭包,所以我试图分析这两个链接中提到的情况是否适用 然后,在许多javascript代码中有一个习惯,即在使用闭包时编写“var self=this;”,如示例所述。一个叫做词汇闭包的“特征”。这在我们的代码中也大量使用 所以我的问题是,如果你使用这个词法闭包技术,但是

我目前正在研究为什么我们的nodejs应用程序会泄漏内存。我不是一个非常熟练的nodejs程序员(我通常与C#一起工作),所以我正在尽可能多地阅读关于这个主题的文档,以找到原因和解决方案

并且教会了我关闭的危险。我们的代码中充满了闭包,所以我试图分析这两个链接中提到的情况是否适用

然后,在许多javascript代码中有一个习惯,即在使用闭包时编写“var self=this;”,如示例所述。一个叫做词汇闭包的“特征”。这在我们的代码中也大量使用

所以我的问题是,如果你使用这个词法闭包技术,但是你没有在函数末尾将self设置为null,那么你是在泄漏self/this吗

举一个具体的例子,该功能是否会导致泄漏:

Achievement.INSERT_QUERY = "SOME QUERY";
Achievement.prototype.insert = function(child, achievement){
    var self = this;
    var data = [child, achievement];
    return this._query(Achievement.INSERT_QUERY, data, function insertResultHandler(err, result){
        if(err) {
            self.emit(DB.ERROR, err);
            return false;
        }
        self.emit(DB.UPDATED, data);
    });
}

非常感谢您的澄清

这一点本身不应泄露;本地变量(包括闭包)在不再可访问时被丢弃。如果回调没有被使用/触发,那么可能。如果有疑问,可以传递
self.emit.bind(self)
,而不是整个对象。好的,然后,由于self被丢弃,因此不会有任何对“this”的延迟引用。但是如果我用'anObject'替换'this',并声明var anObject={};在函数外部,它会泄漏吗?我不认为这是泄漏,因为所有调用只会使用一个外部对象,并且本地
self
引用仍然会被丢弃。正如前面所说的,这不会是内存泄漏。只是一个想法:您不是在内存中存储expressJS会话,是吗?因为这可能是一种非常非常好的内存泄漏方法。