我想知道下面提到的代码中的内存泄漏。 JavaScript是否进行自动垃圾收集。
var aGlobalObject = SomeGlobalObject;
function myFunction() {
var localVar = aGlobalObject;
}
我是否必须清除以下内容。
var aGlobalObject = SomeGlobalObject;
function myFunction() {
var localVar = aGlobalObject;
localVar = null;// or delete localVar
}
由于
答案 0 :(得分:2)
您的代码中没有内存泄漏。局部变量引用与全局变量相同的对象。当函数返回时,删除局部变量,因为没有任何对它的引用。对象本身仍然存在,因为它仍然被全局变量引用。 (当我说“删除局部变量”时:从技术上讲,变量所在的[隐式]容器不再具有任何引用它的东西,并且可用于垃圾收集;实际的收集可能会在以后发生。 )
Javascript确实有垃圾收集。 delete
关键字在Javascript中意味着完全不同于C ++中的内容。 Javascript对象具有属性。您可以使用delete
从对象中完全删除属性,例如:
var obj = {}; // Blank object
obj.foo = 5; // `obj` now has a property called `foo`
obj.foo = null; // `obj` STILL has a property called `foo`; its value is just null now
delete obj.foo; // `obj` no longer has a property called `foo`
答案 1 :(得分:0)