Nein, tut es nicht. Nach der Zeile aObj = null
gibt es keine verbleibenden Verweise auf das Objekt, das es enthielt. Es hat einen Verweis auf argument
, aber argument
hat keinen Verweis auf es, und nachdem Sie die einzige Referenz auf das Objekt (in aObj
) freigegeben haben, ist das Objekt für Garbage Collection geeignet.
Lassen Sie uns die Welt nur stoppen vor der aObj = null
Linie und sehen, was im Speicher ist (einige Details Weglassen):
+−−−−−−−−−−−−−−−+
a−−−−−−−−>| (function) |
+−−−−−−−−−−−−−−−+
| (...) | +−−−−−−−−−−+
| prototype |−−−−+−−>| (object) |
+−−−−−−−−−−−−−−−+ | +−−−−−−−−−−+
| | (...) |
| +−−−−−−−−−−+
|
+−−−−−−−−−−−−−−−+ |
+−−>| (object) | |
| +−−−−−−−−−−−−−−−+ |
| | [[Prototype]] |−−−−+ +−−−−−−−−−−+
| | argument |−−−−+−−>| (object) |
| +−−−−−−−−−−−−−−−+ | +−−−−−−−−−−+
| | | prop1: 1 |
aObj−−+ | | prop2: 2 |
| +−−−−−−−−−−+
b−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
Jetzt können wir tun, um die aObj = null
Linie und erhalten:
+−−−−−−−−−−−−−−−+
a−−−−−−−−>| (function) |
+−−−−−−−−−−−−−−−+
| (...) | +−−−−−−−−−−+
| prototype |−−−−+−−>| (object) |
+−−−−−−−−−−−−−−−+ | +−−−−−−−−−−+
| | (...) |
| +−−−−−−−−−−+
|
+−−−−−−−−−−−−−−−+ |
| (object) | |
+−−−−−−−−−−−−−−−+ |
| [[Prototype]] |−−−−+ +−−−−−−−−−−+
| argument |−−−−+−−>| (object) |
+−−−−−−−−−−−−−−−+ | +−−−−−−−−−−+
| | prop1: 1 |
aObj: null | | prop2: 2 |
| +−−−−−−−−−−+
b−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
Wie Sie sehen können, hat nichts mehr einen Verweis auf dieses Objekt.
Und was ist der einfachste Weg, den ich testen und sehen kann?
Chrome hat einen ziemlich fortschrittlichen Speicher-Profiler, der kann unter anderem, zeigen Ihnen die Anzahl der Objekte von einem bestimmten Konstruktor, der immer noch im Speicher befinden. Mehr unter their dev tools site here.