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

时间:2015-04-06 16:39:18

标签: javascript memory-leaks closures

我试图了解在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;
        });


    };

如果这是一个糟糕的例子,有人能告诉我更好的内存泄漏闭包的示例以及如何解决它?

提前致谢!

1 个答案:

答案 0 :(得分:2)

  

我试图了解在JavaScript中使用闭包时如何防止内存泄漏。

你几乎不需要。引擎的垃圾收集器为您做到了这一点。它非常强大,很少需要帮助。

  

上面是否导致内存泄漏,因为在click事件中引用了obj1。?

它确实阻止了obj1被垃圾回收,是的,因为你仍然引用它。但是,这不符合“内存泄漏”的条件,因为它是故意的。您希望将对象保留在内存中。

如果testFunction被调用的次数超出预期,并且on确实会使关闭的时间超过预期,则可能会成为泄漏。

  

可以通过执行以下操作来解决此问题吗

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