2016-08-16 1 views
0

Pseudo Beispielcode einen Anwendungsfall darstellt (oder auch nicht kompilieren können)Werden Scopes aufgeräumt, wenn sie nutzlos sind?

+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) 

In diesem Beispiel eine scoped Funktion Ich fange an bis zu meinem ‚applicaton‘ X auf Elemente markiert mit Daten-fancy zu registrieren, die habe enable-application auf 'yes' gesetzt

da ich diesen Zugriffsschlüssel mehrmals verwenden muss und häufige Änderungen unterliegen kann, habe ich mich entschieden, ihn in einer Variablen im äußersten Bereich zu speichern, wo ich ihn verwenden kann für die verschiedenen checks and balances.

Meine Frage ist:

Wenn ich nicht die enableapp Variable in der X-Anwendung, mit dem äußersten Umfang erhält gesammelt Müll, wenn der intial Kurs ausgeführt wurde? oder bleibt es im Speicher, bis das letzte Anwendungsobjekt gelöscht ist und nicht mehr initialisiert wird.

+0

Wenn Sie eine neue Schließung erstellen, werden die Außenschließungen erfasst, wenn Sie auf eine Variable mit darin verweisen. So wird die Referenz nicht verlieren, bis die innerste Schließung veröffentlicht wird –

+0

Hier ist ein wirklich guter Artikel darüber https://developer.mozilla.org/en/docs/Web/JavaScript/Closures –

+0

ja, aber wenn es nicht ist in der Anwendung überhaupt referenziert wird, und alles, was nach der anfänglichen Initialisierung weiterlebt, ist die Anwendung, wird die Schließung gesammelt oder bleibt sie am Leben. Ich bin nur neugierig auf die Müllsammelmechanik. – Tschallacka

Antwort

0

Da enableapp nirgends in den X-Anwendungskonstruktor- oder -Prototypmethoden referenziert ist und nur zur Definitionszeit in der forEach-Funktion verwendet wird, sollte es zu irgendeinem Zeitpunkt eine Garbage Collection sein.