Javascript 闭包 - 如何防止内存泄漏

标签 javascript memory-leaks closures

我想了解在 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 被垃圾回收,是的,因为您仍然引用它。但是,这不属于“内存泄漏”,因为它是故意的。您想要将对象保留在内存中。

如果 testFunction 的调用频率比您预期的要高,并且 on 保留闭包的时间比需要的时间长,则可能会发生泄漏。

can I fix it by doing the following

a) 没有什么可以解决的 b) 不,引入一个额外的变量不会改变行为。 obj1 仍然从闭包中引用。

关于Javascript 闭包 - 如何防止内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29475443/

相关文章:

c++ - 不可预测的文件描述符泄漏

javascript - 为什么我不能在 Javascript 中滚动循环?

javascript - 有没有办法暂停脚本直到 javascript 关闭完成? JavaScript、jQuery、AJAX

javascript - 发布的 Ajax 发送的数据似乎没有出现在 Django View 中

javascript - 如何获取html代码?Jquery html() 和 outhtml prop 不是我想要的

javascript - D3.js - 具有多个环和动画过渡的圆环图

c# - 使用带有终结器的 C++/CLI 定义类时 C# 中的内存泄漏

javascript - 在javascript中,下面的代码是如何工作的

java - Rx 中的 groupBy、过滤器和内存泄漏

javascript - 有没有办法在 Javascript 中返回一个外部函数?