JavaScript | 関数と参照渡しの注意点

JavaScript JavaScript
スポンサーリンク

主な内容の要点

JavaScriptで関数に値を渡すとき、「数値や文字列」などの基本型はコピーが渡されるので元の変数は変わらない。一方で、「配列やオブジェクト」などの参照型は同じデータを共有するため、関数内で変更すると元の変数にも影響が出る。


詳しい解説

1. 基本型(数値・文字列・真偽値など)

  • 関数に渡すときは「値そのもの」がコピーされる
  • 関数内で値を変更しても、呼び出し元の変数には影響しない
  • 例:
function square(num) {
  num = num * num;
  console.log(num); // 100
}
let x = 10;
square(x);
console.log(x); // 10(元の値は変わらない)
JavaScript

2. 参照型(配列・オブジェクト)

  • 関数に渡すときは「参照(アドレス)」が渡される
  • 関数内で要素やプロパティを変更すると、呼び出し元の変数にも反映される
  • 例:
function squareArray(arr) {
  for (let i = 0; i < arr.length; i++) {
    arr[i] = arr[i] * arr[i];
  }
}
let nums = [10, 15, 20];
squareArray(nums);
console.log(nums); // [100, 225, 400](元の配列も変わる)
JavaScript

3. 注意点

  • 基本型は「値渡し」参照型は「参照渡し」のように振る舞う
  • ただし、関数内で「新しい配列やオブジェクトを代入」した場合は、呼び出し元には影響しない
function resetArray(arr) {
  arr = [0, 0, 0]; // 新しい配列を代入
}
let nums = [1, 2, 3];
resetArray(nums);
console.log(nums); // [1, 2, 3](元の配列はそのまま)
JavaScript

初心者へのアドバイス

  • 「基本型は安全、参照型は注意」と覚えると理解しやすい
  • 配列やオブジェクトを関数に渡すときは、元のデータを壊していいのかを意識する
  • 元のデータを守りたいときは、コピーを作ってから渡すslice() やスプレッド構文 [...] を使う)

この知識は、バグを防ぐためにとても大事です。特に配列やオブジェクトを扱うときは「関数内での変更が外にも影響する」ことを意識しておくと安心です。

タイトルとURLをコピーしました