1

Ich lerne immer noch, wie Referenzierung und Garbage Collector in Javascript arbeiten, daher in meinem Beitrag zu blähen und Lecks zu reduzieren. Ich erstelle eine Factory, die ein Objekt enthält, dessen Werte übergeben oder von ihm abgerufen werden können.Objekt in JSON string und null es

.factory('lib', function(){ 
    var lib={}; 
    return { 
    set: function(id,value,isObj){ 
     if(isObj){ 
     lib[id]=JSON.stringify(value); 
     }else{ 
     lib[id]=value; 
     } 
    }, 
    del: function(id){ 
     lib[id]=null; 
    } 
    }; 
}) 

.controller('testCtrl',function(lib,$timeout){ 
    lib.set("1",{'name':'James','sureName':'Potter'},true); 
    $timeout(function(){ 
    lib.del("1"); 
    },1000); 
}) 

Also meine Fragen sind; indem ich mein obj in eine Zeichenkette umwandelt, später in eine Zeichenkette und jetzt als Nullwert. Wird mein original obj erreichbar sein und wird es vom Garbage Collector abgeholt? Was passiert auch mit den Eigenschaften des Objekts? Ich versuche mich in eine Zeichenfolge zu verwandeln?

+0

JSON.Stringify gibt nur einen String zurück, der nichts mit dem Objekt zu tun hat, nachdem es erstellt wurde. Es ist ein String-Objekt ohne Referenzen auf das Objekt. Sie können das Objekt und die Zeichenfolge beliebig ändern, und sie sind völlig unabhängig voneinander. –

Antwort

0

Da das Objekt aus einem Objektliteral in der Funktionsargumentliste erstellt wird, gibt es keine Referenzen auf das Objekt außerhalb der set()-Funktion. Die einzige Referenz ist die lokale Variable value, und wenn die set()-Funktion die Variable zurückgibt, verschwindet das Objekt. So können alle ihre Eigenschaften, da sie auch Literale enthalten, keine Werte sein, auf die andere Variablen Bezug nehmen.

Sie haben das Objekt nicht in eine Zeichenfolge umgewandelt. Sie haben einfach eine neue Zeichenfolge erstellt, die eine Repräsentation des Objekts enthält. Die Zeichenfolge und das Objekt sind vollständig unabhängig.

+0

danke, @Barmar. noch etwas, nur um etwas zu verdeutlichen. Wert = JSON.Stringify (Wert) - wird das dann ein Leck verursachen? da es auf sich selbst zeigt. zuletzt lib [id] = null, wird es vom Garbage Collector gesammelt? –

+0

Nein, es verursacht kein Leck. Wenn die Variable nicht mehr auf das Objekt zeigt, wird das Objekt unbrauchbar. Es ist sehr einfach: Wenn es keinen Weg gibt, auf ein Objekt zuzugreifen, ist es Müll und wird gesammelt. – Barmar