Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript闭包-如何防止内存泄漏_Javascript_Memory Leaks_Closures - Fatal编程技术网

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

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


    };
如果这是一个糟糕的例子,有人能给我展示一个内存泄漏的闭包更好的例子,以及如何修复它吗

提前谢谢

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

你几乎不需要这样做。引擎的垃圾收集器为您执行此操作。它非常强大,很少需要帮助

上述情况是否因为单击事件中引用了obj1而导致内存泄漏

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

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

我可以通过执行以下操作来修复它吗


a) b)不,引入额外变量不会改变行为<代码>obj1仍然从闭包中引用。

这两个功能都不起作用。(好的,函数可以工作,但事件处理程序会失败。)谢谢,我去掉了设置obj1=null的那一行。谢谢你澄清了什么是内存泄漏,因为我确实想保留对象。