2016-05-14 7 views
2

Lassen Sie uns am Anfang sagen wir:Wenn Objektvariable in Javascript neu zugewiesen wird, was passiert mit dem ursprünglichen Objekt?

class AI { 
// class properties/methods here 
} 
var chappie = new AI; 

Dann, nachdem die Variable verwendet wird, wenn ich es zurücksetzen wollen durch den Aufruf:

chappie = new AI; 

was ursprüngliche Objekt passiert? Wird Müll gesammelt? Ist das erlaubt, oder gibt es einen besseren Weg, eine Variable "zurückzusetzen"?

+3

Wenn keine andere Referenz vorhanden ist, wird sie per GC entfernt. Dies ist die akzeptierte Methode zum Entfernen unerwünschter Speicherzuordnungen. Anruf-Dereferenzierung. – Blindman67

+1

Hängt davon ab, was Sie mit "Reset" meinen. Sie erstellen ein neues Objekt und weisen es dieser Variablen zu. Wenn Sie jedoch das vorherige Objekt einfach wegwerfen möchten, setzen Sie die Variable auf null und erstellen Sie kein neues Objekt. War ein bisschen unklar, was deine Absicht war. –

+1

* "Gibt es einen besseren Weg" * ... wahrscheinlich nicht, wenn alles, was Sie tun möchten, das Original – charlietfl

Antwort

0

Wenn keine Verweise auf ein Objekt mehr vorhanden sind, wird das Objekt schließlich mit einem Garbage-Collected-Befehl versehen.

Wenn Sie ursprünglich 1 Referenz hatten und jetzt keine haben, wird der Speicher schließlich freigegeben.

var obj = { }; 
var a = obj; 
var b = obj; 
a = null; 

Es gibt immer noch eine Referenz, also ändert sich nichts.

Zu der anderen Frage: "Wie sonst würde ich eine Variable zurücksetzen?" Meine Follow-up-Frage ist "Warum?"

Wenn der GC aktiviert werden soll, können Sie die Variable auf null oder auf undefined oder was auch immer setzen (vorausgesetzt, es ist das letzte Mal, dass auf das Objekt verwiesen wird).

... ansonsten bereinigt der GC auch die var selbst, wenn die var nicht mehr benötigt wird. Und wenn die entfernte Var die letzte Referenz auf einen Wert war, wird der Wert bereinigt.

+1

überschreibt, werden Vars erst entfernt, wenn sie nicht mehr im Geltungsbereich sind. Es ist vorzuziehen, "undefiniert" anstelle von "null" zu verwenden, da undefined eine sinnvollere Bedeutung als null hat. Auch 'null' wird in JSON serialisiert und 'undefiniert' wird ignoriert. – Blindman67

+0

@ Blindman67: 'null' hat die Bedeutung" kein Objekt ", was genau hier bevorzugt ist. – Bergi

+0

@Bergi null ist ein Platzhalter. Es bedeutet, dass momentan kein Wert für die Variable verfügbar ist, aber wir möchten diese Variable für den Fall, dass ein zukünftiges Bedürfnis besteht, behalten (reservieren). Undefiniert ist wörtlich gemeint und bezieht sich auf nicht existierende undefinierte Entitäten. Es wird zugewiesen, um anzuzeigen, dass für die Variable kein weiterer Bedarf besteht und kein sinnvoller Kontext mehr vorhanden ist. Eine Variable mit dem Wert null muss während der Serialisierung/Übertragung/Klonierung beibehalten werden, im Gegensatz zu einer Variablen mit undefiniertem Wert, die ausgegeben werden kann. Wenn Sie keine weitere Verwendung für eine Variable haben, setzen Sie sie auf undefiniert. – Blindman67

Verwandte Themen