Javascript闭包-如何防止内存泄漏
我试图理解在JavaScript中使用闭包时如何防止内存泄漏。有人能告诉我我所做的是否正确吗 我有一个虚拟函数:Javascript闭包-如何防止内存泄漏,javascript,memory-leaks,closures,Javascript,Memory Leaks,Closures,我试图理解在JavaScript中使用闭包时如何防止内存泄漏。有人能告诉我我所做的是否正确吗 我有一个虚拟函数: var testFunction = function(obj1){ //other code.. on(control, "click", function(){ obj1.label= "test"; }); }; 1) 上述情况是否因为单击事件中引用了obj1而导致内存泄漏 2) 我可以通过执行以下操作来修复它: var tes
var testFunction = function(obj1){
//other code..
on(control, "click", function(){
obj1.label= "test";
});
};
1) 上述情况是否因为单击事件中引用了obj1而导致内存泄漏
2) 我可以通过执行以下操作来修复它:
var testFunction = function(obj1){
//other code.....
on(control, "click", function(){
var newObj1 = obj1;
newObj1.label= "test";
newObj1 = null;
});
};
如果这是一个糟糕的例子,有人能给我展示一个内存泄漏的闭包更好的例子,以及如何修复它吗
提前谢谢
我试图理解在JavaScript中使用闭包时如何防止内存泄漏
你几乎不需要这样做。引擎的垃圾收集器为您执行此操作。它非常强大,很少需要帮助
上述情况是否因为单击事件中引用了obj1而导致内存泄漏
它确实防止了obj1
被垃圾收集,是的,因为您仍然引用它。但是,这不符合“内存泄漏”的条件,因为这是故意的。您希望将对象保留在内存中
如果调用testFunction
的频率比您预期的要高,并且on
保存闭包的时间比需要的时间长,则可能会发生泄漏
我可以通过执行以下操作来修复它吗
a) b)不,引入额外变量不会改变行为<代码>obj1仍然从闭包中引用。这两个功能都不起作用。(好的,函数可以工作,但事件处理程序会失败。)谢谢,我去掉了设置obj1=null的那一行。谢谢你澄清了什么是内存泄漏,因为我确实想保留对象。