少し前にJavaScriptの値の受け渡し方について改めて調べていたら、Passing by value vs. by referenceの話が大変参考になった。詳しくは上記リンクを参照。
簡単に言うと、JavaScriptの値の受け渡しは「Pass by value」なのだけど、渡す値がObjectの場合は、Objectが格納されている場所に関する情報が渡される。
つまり
1 | var a = 0; |
とすると、値が渡されただけなので、元のデータを参照しない。xは10だけど、aは0のままになる。
一方で、
1 | var a = [0]; |
とすると、渡された値が配列オブジェクトなので、xの値は元のオブジェクトが格納されている場所の情報になる。いわゆる参照渡しの状態になる。xは[10]となるし、aも[10]となる。
でも、
1 | var a = [0]; |
とすると、xが新しい配列オブジェクトに置き換わることになり、元のオブジェクトaとの関連はなくなる。なので、aは[0]のままで、xは[10]となる。
というメモ。