关闭:
function test() {
var count = 0;
return function() {
count++;
};
}
众所周知,count
在test()
被调用后不会被释放,现在如果关闭对我来说没用,我怎么能释放它的记忆呢?
答案 0 :(得分:3)
javascript中的所有对象都是垃圾收集的,无论他们是否参与关闭或不关闭。在上面的代码中,如果你这样做:
var x = test();
然后当然count
的内存无法释放,因为x
稍后可能会使用它。但是如果你这样做:
var x = test();
x = "";
count
的内存迟早会被垃圾收集。
答案 1 :(得分:0)
闭包是JavaScript中内存泄漏的重要来源。
function foo() {
var count = 0;
function do() {
return count++;
}
return {
do: do}
}
这里foo()返回do函数表达式,do()对count变量进行闭包。我们不知道什么时候会调用返回的do()表达式。所以垃圾收集器无法理解何时释放内存。所以我们需要在使用后手动释放它。