我试图了解在JavaScript中使用闭包时如何防止内存泄漏。有人能告诉我我的工作是否正确吗?
我有一个虚拟功能:
var testFunction = function(obj1){
//other code..
on(control, "click", function(){
obj1.label= "test";
});
};
1)上面是否导致内存泄漏,因为在click事件中引用了obj1。?
2)我可以通过执行以下操作来修复它:
var testFunction = function(obj1){
//other code.....
on(control, "click", function(){
var newObj1 = obj1;
newObj1.label= "test";
newObj1 = null;
});
};
如果这是一个糟糕的例子,有人能告诉我更好的内存泄漏闭包的示例以及如何解决它?
提前致谢!
答案 0 :(得分:2)
我试图了解在JavaScript中使用闭包时如何防止内存泄漏。
你几乎不需要。引擎的垃圾收集器为您做到了这一点。它非常强大,很少需要帮助。
上面是否导致内存泄漏,因为在click事件中引用了obj1。?
它确实阻止了obj1
被垃圾回收,是的,因为你仍然引用它。但是,这不符合“内存泄漏”的条件,因为它是故意的。您希望将对象保留在内存中。
如果testFunction
被调用的次数超出预期,并且on
确实会使关闭的时间超过预期,则可能会成为泄漏。
可以通过执行以下操作来解决此问题吗
a)没有什么可以修复b)不,引入额外的变量不会改变行为。仍然会从闭包中引用obj1
。