先日、JavaScriptで大量割り当てがどのように機能するかを正確に確認するために遊んでいました。
まず、コンソールでこの例を試しました:
a = b = {};
a.foo = 'bar';
console.log(b.foo);
その結果、アラートに「バー」が表示されていました。それは十分に公平でaありb、実際には同じオブジェクトの単なるエイリアスです。次に、この例をもっと簡単にするにはどうすればよいかと考えました。
a = b = 'foo';
a = 'bar';
console.log(b);
それはだいたい同じですよね。さて今回は、最初の例の振る舞いから期待するほどには戻りfooませんbar。
なぜこれが起こるのですか?
注:この例は、次のコードでさらに簡略化できます。
a = {};
b = a;
a.foo = 'bar';
console.log(b.foo);
a = 'foo';
b = a;
a = 'bar';
console.log(b);
(JavaScriptは文字列や整数などのプリミティブをハッシュとは異なる方法で処理していると思います。ハッシュはポインターを返しますが、「コア」プリミティブはそれらのコピーを返します)