2015-04-06 47 views
2

我想了解如何在JavaScript中使用閉包時防止內存泄漏。如果我所做的是正確的,有人可以告訴我嗎?Javascript關閉 - 如何防止內存泄漏

我有一個虛擬函數:

var testFunction = function(obj1){ 

    //other code.. 

    on(control, "click", function(){ 
     obj1.label= "test"; 
    }); 

}; 

1)請問以上導致內存泄漏,因爲OBJ1在click事件被引用?

2)我可以做修復它下面:

var testFunction = function(obj1){ 

     //other code..... 

     on(control, "click", function(){ 
      var newObj1 = obj1; 
      newObj1.label= "test"; 
      newObj1 = null; 
     }); 


    }; 

如果這是一個壞榜樣,可有人告訴我有內存泄漏和如何解決它的封閉的更好的例子嗎?

在此先感謝!

+0

這兩個函數都不起作用。 (嗯,功能將工作,但事件處理程序將失敗。) – Pointy

+0

謝謝,我拿出了我設置obj1 = null的行。 – EriqaBana

回答

2

我想了解如何在JavaScript中使用閉包時防止內存泄漏。

你幾乎不需要。引擎的垃圾收集器爲你做。它非常強大,很少需要幫助。

上面是否會導致內存泄漏,因爲在click事件中引用了obj1。

它確實阻止obj1被垃圾收集,是的,因爲你仍然參考它。但是,這不符合「內存泄漏」,因爲它是故意的。你想要保存內存中的對象。

如果testFunction被調用的頻率比您預期的要更頻繁,並且on的確保持閉合時間超過了需要,它可能會變成泄漏。

我可以做修復它下面

一)有沒有什麼解決b)否,引入額外的變量不會改變的行爲。 obj1仍然是從封閉引用。

+0

感謝您澄清什麼是內存泄漏,因爲我想保留該對象。 – EriqaBana