もんだい
以下のA,Bではそれぞれ"OK"と"NG"のどちらが出力されるでしょうか?
javascript
text = ["OK"];
function hoge(array){
array[0] = "NG";
return array;
}
console.log(hoge(text)); // A
console.log(text); // B
こたえ
どっちも["NG"]が出力されます。クリック!
出力
> ["NG"]
> ["NG"]
javascriptでは配列を引数にとると参照先が渡されるので、中身を直接操作することになります。
じゃあこれは?
javascript
text = ["OK"];
function hoge(array){
array = ["NG"]; // ここだけ変更。
return array;
}
console.log(hoge(text)); // A
console.log(text); // B
こたえ
クリック!
> ["NG"]
> ["OK"]
array = ["NG"];
と代入した時点で参照先が変更されるため、元の配列には影響しません。
まとめ
要するにこれ↓読めばわかります。
【Javascript】値渡しと参照渡しについてあらためてまとめてみる https://qiita.com/migi/items/3417c2de685c368faab1
代入の形をとるか直接操作するかで結果が変わる。
その仕様がわからなくてめっちゃ詰んでたのでメモしました。