javascriptの値渡しと参照渡しの違いをまとめてみました!
プリミティブ型とオブジェクト型で渡し方が違う。
結論から言うと、javascriptの場合
- String
- Boolean
- Number
などのプリミティブ型が値渡し。
- Object
- Array
- Function
などのオブジェクト型が参照渡しになります。
参照渡しと値渡しの挙動の違い
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// 値渡し let x = 10; let y = x; x = 20; console.log(x); // 20 console.log(y); //10 // 参照渡し let x2 = { value: 10 }; let y2 = x2; x2.value = 20; console.log(x2.value); // 20 console.log(y2.value); // 20 |
こちらのように、値渡しの場合は値がコピーされます。
しかし、参照渡しの場合、参照しているアドレスがコピーされるので、片方の変数の値を変更すると、もう一つの値も変更されます。
関数の引数でも、値渡しと参照渡しで挙動が異なる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// 値渡し let number = 10; function increase(number) { number++; } increase(number); console.log(number); // 10 // 参照渡し let obj = { value: 10 }; function increase(obj) { obj.value++; } increase(obj); console.log(obj.value); // 11 |
このように、引数の値の場合でも、参照渡しと値渡しで挙動が異なります。
基本だけど、意外と忘れてしまう
基本中の基本ですが、意外と忘れがちな参照渡しと値渡しの違い。
思わぬ失敗につながらないように、しっかりと覚えておきます!