Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS-垃圾回收关闭?_Javascript_Garbage Collection_Closures - Fatal编程技术网

Javascript JS-垃圾回收关闭?

Javascript JS-垃圾回收关闭?,javascript,garbage-collection,closures,Javascript,Garbage Collection,Closures,各位程序员好 我的整个代码基于以下结构: } var test1=伪类() 我想保护“privateVar”,同时能够操纵它。“伪类”一次只实例化一次。我相信“测试”包括一个结束。当我完成“test”时,我可能会稍后创建“test2”重新开始(privateVar再次设置为0)。我对仅仅将“test”重置为0不感兴趣 现在,问题来了。当不再使用“test”时,闭包会发生什么情况?它是垃圾收集还是会导致内存泄漏?若否,在哪种情况下会这样做??我希望我的问题足够清楚,我对这东西还很陌生。谢谢 有一种

各位程序员好
我的整个代码基于以下结构:

}

var test1=伪类()

我想保护“privateVar”,同时能够操纵它。“伪类”一次只实例化一次。我相信“测试”包括一个结束。当我完成“test”时,我可能会稍后创建“test2”重新开始(privateVar再次设置为0)。我对仅仅将“test”重置为0不感兴趣


现在,问题来了。当不再使用“test”时,闭包会发生什么情况?它是垃圾收集还是会导致内存泄漏?若否,在哪种情况下会这样做??我希望我的问题足够清楚,我对这东西还很陌生。谢谢

有一种常见的误解,即闭包本质上会导致内存泄漏。它们不会——只要它们变成垃圾,它们就可以像任何其他对象一样被垃圾收集。它们在泄漏时往往会导致问题,因为它们会阻止其继承的父作用域被垃圾收集。这会给闭包带来极大的影响

在您的示例中,当没有其他引用时,
pseudoClass
返回的对象及其方法关闭的范围(包含
privateVar
)将符合GC的条件:

var test1 = pseudoClass();
test1 = null;

// The object, closures and privateVar can be garbage collected
如果有另一个对由
pseuedoClass
返回的对象的引用或任何包含函数作用域的闭包,则不能对该对象和作用域进行垃圾收集。这种模式是内存泄漏的常见原因

var test1 = pseudoClass();
var leak = test1.incrementVar
test1 = null;

// Nothing can be garbage collected, since `incrementVar` needs to retain its parent scope

非常感谢!你的回答很有用。您是否还有关于此类主题的文档?
var test1 = pseudoClass();
var leak = test1.incrementVar
test1 = null;

// Nothing can be garbage collected, since `incrementVar` needs to retain its parent scope