繁体   English   中英

在局部范围内引用全局变量

[英]Referencing global variables in local scopes

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

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

我是否必须按以下说明清除内存。

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

谢谢

该代码中没有内存泄漏。 局部变量引用与全局变量相同的对象。 函数返回时,将删除局部变量,因为不再有对其的引用。 对象本身仍然存在,因为它仍被全局变量引用。 当我说“删除本地变量”时:从技术上讲,该变量所在的[隐式]容器不再具有引用它的任何内容,可用于垃圾收集;实际的收集可能在以后发生。

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`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM