简单对象的Javascript内存泄漏

简单对象的Javascript内存泄漏,javascript,memory-leaks,Javascript,Memory Leaks,我正在寻找JavaScript中一些非常基本的内存泄漏示例,以及如何修复它们。具体来说,如果我在代码中做了类似的事情 var obj = new MyObj(); 我是否必须处理一些事情或明确地执行一些步骤,以便obj不会泄漏?或者我不必担心什么?它会被浏览器自动收集垃圾吗 内存处理方式(w.r.t.DOM或任何其他对象)是否存在跨浏览器差异?我想您可以在本页中找到答案。一个简短的摘要:当对象没有更多引用时,浏览器将自动垃圾收集对象 这样做 var obj={}; obj=null 将导致将来

我正在寻找JavaScript中一些非常基本的内存泄漏示例,以及如何修复它们。具体来说,如果我在代码中做了类似的事情

var obj = new MyObj();
我是否必须处理一些事情或明确地执行一些步骤,以便obj不会泄漏?或者我不必担心什么?它会被浏览器自动收集垃圾吗


内存处理方式(w.r.t.DOM或任何其他对象)是否存在跨浏览器差异?

我想您可以在本页中找到答案。

一个简短的摘要:当对象没有更多引用时,浏览器将自动垃圾收集对象

这样做

var obj={};
obj=null

将导致将来在同一个随机点对
obj
进行垃圾收集,您不能明确告诉浏览器对该对象进行垃圾收集。当然,这是您通常不会做的事情,因为对象引用通常超出范围

例如:

function foo() {
 var obj = {};
}
foo();

在这个函数调用之后,
obj
变量不再存在并超出范围,被
obj
引用的对象现在是垃圾收集的候选对象。

您可以在这里引用一些很好的例子。您可能想了解GC的目的是您不必担心。Thx…但是如果我不明确地执行obj=null…那么这将永远不会被垃圾收集?它会的,这只是显式地将引用设置为null,当引用超出范围时也会发生,请参阅我更新的postThx以了解基本示例…因此,大多数情况下,似乎没有必要为GC显式地将obj设置为null…任何简单的示例都可能不会发生这种情况,我们必须显式地执行此操作?我无法想象任何场景会建议显式地将变量设置为null,除非你有一个带有变量加载(我真的是指加载)的函数,如果你有一个这样的函数,可能需要重构这个代码。我自己从来没有显式地将引用设置为null。我还建议您阅读另一张海报上的文章,以便更好地理解内存管理。@RobinHellemans:当长寿命闭包可以访问不再需要的大型对象时,有时这是可取的。但事实上,这是罕见的,好的编译器无论如何都能检测到这种情况。仅当您注意到GC需要帮助(提示)时才使用它。