在本地范围内引用全局变量

时间:2010-05-17 08:11:27

标签: javascript

我想知道下面提到的代码中的内存泄漏。 JavaScript是否进行自动垃圾收集。

var aGlobalObject = SomeGlobalObject; 
function myFunction() {
   var localVar = aGlobalObject;
}

我是否必须清除以下内容。

var aGlobalObject = SomeGlobalObject; 
function myFunction() {
   var localVar = aGlobalObject;
   localVar = null;// or delete localVar
}

由于

2 个答案:

答案 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)