关闭:
function test() {
var count = 0;
return function() {
count++;
};
}
众所周知,count
在调用test()
后不会释放,现在如果闭包对我来说没有用,我怎么释放内存的?
最佳答案
JavaScript 中的所有对象都会被垃圾回收,无论它们是否参与闭包。在上面的代码中,如果您这样做:
var x = test();
那么当然不能释放count
的内存,因为它可能会被x
使用。但是,如果您这样做:
var x = test();
x = "";
count
的内存迟早会被垃圾回收。
此外,如果您这样做:
function foo () {
var x = test();
x();
}
foo();
count
的内存也会被垃圾回收,因为当 foo()
结束时 x
超出范围。
确保 JavaScript 中不存在内存泄漏的最佳方法是避免使用全局变量。
Note: The garbage collector in old versions of IE used a simple reference count which means that circular data structures are not garbage collected. This was fixed in either IE6 or IE7 and was never a problem in other javascript engines which normally use a mark-and-sweep garbage collector
关于javascript - javascript中如何释放闭包的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39586546/