gpt4 book ai didi

javascript - 在局部作用域中引用全局变量

转载 作者:行者123 更新时间:2023-12-02 20:38:41 25 4
gpt4 key购买 nike

我想知道下面提到的代码中的内存泄漏。 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`

关于javascript - 在局部作用域中引用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2847480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com