2016-08-16 25 views
0

僞示例代碼示出了用例(可以或可以不編譯)如果範圍無用,範圍會被清理乾淨嗎?

+function($){ 
    var enableapp = 'enable-application'; 
    var x = function(something) { 
     this.thing = something; 
     this.dosomething(); 
    } 
    x.prototype.dosomething = function() { 
     console.log(this.thing); 
    } 
    $('[data-fancy]').each(function(index,elem) { 
     var fancy = $(elem); 
     if(fancy.is('[data-'+enableapp+']') && fancy.data(enableapp) == 'yes') { 
      fancy.data('app', new x(fancy)); 
     } 
     else { 
      fancy.removeData('app'); 
     } 

}(jQuery) 

在這個例子中我開始了一個範圍的函數來我的「的一個應用」 X寄存器到標有數據花式元件,其已設置啓用應用爲'是'

因爲我需要多次使用此訪問密鑰,並且可能會經常發生變化,所以我決定將它存儲在最外層範圍內的變量中,我可以在其中使用它爲幾個檢查和平衡。

我的問題是:

如果我沒有在X應用程序中使用enableapp變化的,最外面的範圍時,INTIAL課程已獲得運行垃圾收集?或者將它留在內存中,直到最後的Application對象被清除並且不再被初始化。

+0

當你創建一個新的閉包時,如果你正在引用一個包含它的變量,它將捕獲這個閉包。所以不會失去參考,直到最內層封閉被釋放 –

+0

這是一篇非常好的文章https://developer.mozilla.org/en/docs/Web/JavaScript/Closures –

+0

是的,但如果它不是在應用程序中完全引用,並且在初始化初始化之後所有依賴的應用程序都將被收集或將保持活着。我只是對垃圾收集機制感到好奇。 – Tschallacka

回答

0

因爲enableapp沒有在X應用程序構造函數或原型方法中的任何地方被引用,只在forEach函數的定義時間使用 - 它應該在某個時間點被垃圾收集。