Javascript 闭包 - 如何防止内存泄漏
Javascript closures - how to prevent memory leaks
我正在尝试了解在 JavaScript 中使用闭包时如何防止内存泄漏。有人可以告诉我我的做法是否正确吗?
我有一个虚拟函数:
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;
});
};
如果这是一个糟糕的例子,谁能告诉我更好的闭包内存泄漏示例以及如何修复它?
提前致谢!
I am trying to understand how I can prevent memory leaks when using closures in JavaScript.
你几乎不需要。引擎的垃圾收集器会为你做这些。它非常强大,很少需要帮助。
does the above cause a memory leak because obj1 is being referenced in the click event.?
它确实防止 obj1
被垃圾收集,是的,因为您仍然引用它。但是,这不符合 "memory leak",因为它是故意的。您想要将对象保存在内存中。
如果 testFunction
的调用频率比您预期的要高,并且 on
保留闭包的时间比需要的长,则可能会发生泄漏。
can I fix it by doing the following
a) 没有什么可以解决的 b) 不,引入一个额外的变量不会改变行为。 obj1
仍然从闭包中引用。
我正在尝试了解在 JavaScript 中使用闭包时如何防止内存泄漏。有人可以告诉我我的做法是否正确吗?
我有一个虚拟函数:
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;
});
};
如果这是一个糟糕的例子,谁能告诉我更好的闭包内存泄漏示例以及如何修复它?
提前致谢!
I am trying to understand how I can prevent memory leaks when using closures in JavaScript.
你几乎不需要。引擎的垃圾收集器会为你做这些。它非常强大,很少需要帮助。
does the above cause a memory leak because obj1 is being referenced in the click event.?
它确实防止 obj1
被垃圾收集,是的,因为您仍然引用它。但是,这不符合 "memory leak",因为它是故意的。您想要将对象保存在内存中。
如果 testFunction
的调用频率比您预期的要高,并且 on
保留闭包的时间比需要的长,则可能会发生泄漏。
can I fix it by doing the following
a) 没有什么可以解决的 b) 不,引入一个额外的变量不会改变行为。 obj1
仍然从闭包中引用。