In JS erwartet, Objekte als Referenz übergeben werden. Wenn Sie also ()(a)
tun, übergeben Sie die Referenz a
, um als Argument zu fungieren.
Nun wird diese Referenz in einer lokalen Variablen als Argument gespeichert. Wenn Sie also die Variable aktualisieren, überschreiben Sie im Wesentlichen das Objekt an dieser Position.
Der Trick ist, wenn Sie die Referenz ersetzen. a=null
aktualisiert die Referenz in der Argumentvariablen a
, überschreibt jedoch nicht das Objekt in der Referenz. Das ursprüngliche Objekt ist also immer noch verfügbar, nur nicht referenziert.
Nach IIFE, wenn Sie sich erneut anmelden, da der Umfang der Argumentvariablen vorbei ist, wird es zerstört, und a
wieder zeigt auf original a
.
Daher werden Sie {a: 10}
Es wird nicht '10' gedruckt, es wird' {a: 10} 'genauso gedruckt, wie Sie es in der Funktion definiert haben. Oh, du meinst die 'null'-Zuweisung ... – evolutionxbox
Ändere die lokale Variable 'a' in etwas anderes und dann wird es wie erwartet funktionieren. – evolutionxbox
zwei Referenzen zeigen in das gleiche Objekt. Wenn Sie eine Eigenschaft hinzufügen, wirkt sich dies auf beide Referenzen aus, aber wenn Sie eine davon auf Null setzen, ändern Sie tatsächlich die Referenz, nicht das Objekt. Über die Originalreferenz, die auf das Objekt zeigt, wird 10 –