如何释放闭包';javascript中的内存是多少?
结束:如何释放闭包';javascript中的内存是多少?,javascript,memory,Javascript,Memory,结束: function test() { var count = 0; return function() { count++; }; } 众所周知,调用test()后,count不会释放,现在如果闭包对我没用,我怎么能释放它的内存呢?javascript中的所有对象都是垃圾收集的,不管它们是否参与闭包。在上面的代码中,如果您执行以下操作: var x = test(); var x = test(); x = ""; function foo () { v
function test() {
var count = 0;
return function() {
count++;
};
}
众所周知,调用
test()
后,count
不会释放,现在如果闭包对我没用,我怎么能释放它的内存呢?javascript中的所有对象都是垃圾收集的,不管它们是否参与闭包。在上面的代码中,如果您执行以下操作:
var x = test();
var x = test();
x = "";
function foo () {
var x = test();
x();
}
foo();
当然,count
的内存不能释放,因为它以后可能会被x
使用。但是,如果您这样做:
var x = test();
var x = test();
x = "";
function foo () {
var x = test();
x();
}
foo();
count
的内存迟早会被垃圾收集
此外,如果您这样做:
var x = test();
var x = test();
x = "";
function foo () {
var x = test();
x();
}
foo();
count
的内存也将被垃圾收集,因为x
在foo()
结束时超出范围
确保javascript中没有内存泄漏的最佳方法是避免全局变量
注意:旧版本IE中的垃圾收集器使用了一个简单的引用计数,这意味着循环数据结构不会被垃圾收集。这在IE6或IE7中都已修复,在通常使用标记和清除垃圾收集器的其他javascript引擎中从来都不是问题
javascript中的所有对象都是垃圾收集的,不管它们是否涉及关闭。在上面的代码中,如果您执行以下操作:
var x = test();
var x = test();
x = "";
function foo () {
var x = test();
x();
}
foo();
当然,count
的内存不能释放,因为它以后可能会被x
使用。但是,如果您这样做:
var x = test();
var x = test();
x = "";
function foo () {
var x = test();
x();
}
foo();
count
的内存迟早会被垃圾收集
此外,如果您这样做:
var x = test();
var x = test();
x = "";
function foo () {
var x = test();
x();
}
foo();
count
的内存也将被垃圾收集,因为x
在foo()
结束时超出范围
确保javascript中没有内存泄漏的最佳方法是避免全局变量
注意:旧版本IE中的垃圾收集器使用了一个简单的引用计数,这意味着循环数据结构不会被垃圾收集。这在IE6或IE7中都已修复,在通常使用标记和清除垃圾收集器的其他javascript引擎中从来都不是问题
闭包是JavaScript中大量内存泄漏的来源
function foo() {
var count = 0;
function do() {
return count++;
}
return {
do: do}
}
这里foo()返回do函数表达式,do()对count变量具有闭包。我们不知道何时调用返回的do()表达式。因此,垃圾收集器无法理解何时释放内存。因此,我们需要在使用后手动释放它。闭包是JavaScript内存泄漏的一个巨大来源
function foo() {
var count = 0;
function do() {
return count++;
}
return {
do: do}
}
这里foo()返回do函数表达式,do()对count变量具有闭包。我们不知道何时调用返回的do()表达式。因此,垃圾收集器无法理解何时释放内存。因此,我们需要在使用后手动释放它。如果因为在函数中返回了一个变量,所以将来只打算使用一个变量,那么您希望释放什么?如果匿名函数没有返回值,则返回匿名函数的目的是什么?您是否试图从
test()返回的匿名函数中返回计数
call?refered此链接可能对您有用:我希望在您释放对返回函数的最后一个引用后的某个时间点对闭包进行垃圾收集。如果您在函数中返回了一个变量,因此将来只打算使用一个变量,您希望释放什么?返回匿名的目的是什么匿名函数不返回值的函数?您是否试图从test()
调用返回的匿名函数中返回计数
?引用此链接可能对您有用:我希望在您释放对返回函数的最后一次引用后,在某个时间点对闭包进行垃圾收集。因此,您可以向foo添加一个方法,将其所有内部设置为“”那么,您能否向foo添加一个方法,将其所有内部设置为“”?