Also habe ich neulich herumgespielt, um genau zu sehen, wie die Massenzuweisung in JavaScript funktioniert.
Zuerst habe ich dieses Beispiel in der Konsole ausprobiert:
a = b = {};
a.foo = 'bar';
console.log(b.foo);
Das Ergebnis war, dass "Balken" in einer Warnung angezeigt wurde. Das ist fair genug aund bwirklich nur Aliase für dasselbe Objekt. Dann dachte ich, wie könnte ich dieses Beispiel einfacher machen.
a = b = 'foo';
a = 'bar';
console.log(b);
Das ist so ziemlich das Gleiche, nicht wahr? Nun, diesmal kehrt es foonicht barso zurück , wie ich es vom Verhalten des ersten Beispiels erwarten würde.
Warum passiert das?
NB Dieses Beispiel könnte mit dem folgenden Code noch weiter vereinfacht werden:
a = {};
b = a;
a.foo = 'bar';
console.log(b.foo);
a = 'foo';
b = a;
a = 'bar';
console.log(b);
(Ich vermute, dass JavaScript Primitive wie Zeichenfolgen und Ganzzahlen anders behandelt als Hashes. Hashes geben einen Zeiger zurück, während "Core" -Primitive eine Kopie von sich selbst zurückgeben.)