Help us understand the problem. What is going on with this article?

クイズ-出力されるのは何でしょう?-

More than 1 year has passed since last update.

もんだい

以下の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

代入の形をとるか直接操作するかで結果が変わる。
その仕様がわからなくてめっちゃ詰んでたのでメモしました。

NNNiNiNNN
主に読んだ本の内容をまとめます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away