2011-01-10 3 views
1

Ist es in Ordnung, Variablen für verschiedene Datentypen in Bezug auf Leistung und Speichernutzung wiederzuverwenden?Javascript Variablenwiederverwendung?

Was passiert mit alten Daten, ist es Müll direkt nach dem Gießen gesammelt?

+0

Können Sie ein Beispiel dafür geben, was Sie meinen? –

+0

@JW var a = 1; a = {z: '1'} – Ozgur

+0

Wo ist das Casting? Sie ordnen nur noch etwas anderes zu. Der Typ spielt keine Rolle wegen der dynamischen Typisierung. – delnan

Antwort

2

Vollständige Offenlegung: Ich habe keine Kenntnis von den Interna bestimmter JavaScript-Engines. Ich gehe von allgemeinen Prinzipien von VMs und Dolmetschern aus.

Normalerweise beziehen sich Variablennamen nur auf andere Speicherorte. Also, ob Sie eine alte Variable entfernen (was passiert, wenn sie außerhalb des Gültigkeitsbereichs liegt) und eine neue Variable einführt oder den aktuellen Inhalt durch ein neues Objekt ersetzt, spielt bei der Speicherzuweisung keine Rolle.

Die Speicherbereinigung kann bei jeder Implementierung anders sein. Sofortige Garbage Collection ist schwierig; Der einzige Weg, wie ich es mir vorstellen kann, sind Referenzzähler, und es ist schwierig, dies auch für zyklische Datenstrukturen zu tun. Die meisten Garbage-Collectors in der Wildnis führen daher nicht-unmittelbare Erfassungszyklen durch, bei denen jedes Mal eine ganze Reihe von Daten entfernt wird. Die Zyklen können zum Beispiel automatisch ausgeführt werden, wenn die Speicherbelegung innerhalb der Engine einen bestimmten Schwellenwert überschreitet (normalerweise wird sie jedoch verfeinert).

3

Es ist in Ordnung, Variablen wiederzuverwenden, obwohl Sie, wenn Sie nicht einige verrückte Dinge mit der Anzahl der Variablen tun, die Sie verwenden, sollten Sie sie wahrscheinlich nicht zu großzügig auf diese Weise wiederverwenden. Es wird allgemein als gute Programmierpraxis angesehen, wenn eine Variable deklariert wird, um auf eine bestimmte Sache zu zeigen, und eine andere Variable verwendet wird, wenn Sie sich auf etwas anderes beziehen wollen.

"Variablen" in Javascript sind nur Referenzen. Sie sind nicht von Natur aus teuer - sie brauchen nicht mehr Platz als ihr Text im Code und einige Bytes im Speicher, die auf etwas anderes zeigen. Wenn Sie einen Variablennamen wiederverwenden, indem Sie den Verweis auf etwas anderes (oder null/undefiniert) setzen, weiß der GC, dass der ursprüngliche Verweis getrennt ist und weiß, dass er gesammelt werden kann.

Der GC in jedem Browser oder in jeder Umgebung, die Sie verwenden, wählt aus, wann der Collector basierend auf vielen Faktoren ausgeführt werden soll.

2

JavaScript ist eine lose typisierte Sprache und kann jeden Datentyp in einer beliebigen Variablen speichern (sogar wiederverwendet).

Wenn Sie jedoch Typen kombinieren, sollten Sie sie in regelmäßigen Abständen mit dem Schlüsselwort typeof überprüfen, um sicherzustellen, dass es sich dabei um den Typ handelt, den Sie zu sein glauben (z. B. wird versucht, eine mathematische Operation für eine Zeichenfolge auszuführen) über die Situation).

Darüber hinaus bleiben JavaScript-Variablen, solange sie im Geltungsbereich sind. Sobald ein Bereich verlassen ist, werden die darin enthaltenen Variablen zerstört (schließlich - es ist automatisch und transparent). Was die Speicherbereinigung bei neu zugewiesenen Variablen betrifft, wird der alte Wert zerstört, sobald der neue Wert zugewiesen wird.

+0

Dies ist die einzige Antwort bisher, die Behauptungen darüber macht, wie GC-ähnliche Operationen auftreten. Könnte einige Referenzen verwenden. – Rondo

Verwandte Themen