Yani geçen gün JavaScript'te toplu atamanın tam olarak nasıl çalıştığını görmek için oynuyordum.
İlk önce bu örneği konsolda denedim:
a = b = {};
a.foo = 'bar';
console.log(b.foo);
Sonuç, bir uyarıda görüntülenen "bar" idi. Bu yeterince adil ave bgerçekten aynı nesnenin takma adlarıdır. Sonra bu örneği nasıl basitleştirebilirim diye düşündüm.
a = b = 'foo';
a = 'bar';
console.log(b);
Bu hemen hemen aynı şey, değil mi? Peki bu sefer, ilk örneğin davranışından beklediğim gibi foodeğil bar.
Bu neden oluyor?
NB Bu örnek, aşağıdaki kodla daha da basitleştirilebilir:
a = {};
b = a;
a.foo = 'bar';
console.log(b.foo);
a = 'foo';
b = a;
a = 'bar';
console.log(b);
(JavaScript'in dizeler ve tamsayılar gibi ilkelleri karmalara farklı şekilde davrandığından şüpheleniyorum. Karalamalar bir işaretçi döndürürken "çekirdek" ilkeller kendilerinin bir kopyasını döndürür)