主な内容の要点
JavaScriptで関数に値を渡すとき、「数値や文字列」などの基本型はコピーが渡されるので元の変数は変わらない。一方で、「配列やオブジェクト」などの参照型は同じデータを共有するため、関数内で変更すると元の変数にも影響が出る。
詳しい解説
1. 基本型(数値・文字列・真偽値など)
- 関数に渡すときは「値そのもの」がコピーされる
- 関数内で値を変更しても、呼び出し元の変数には影響しない
- 例:
function square(num) {
num = num * num;
console.log(num); // 100
}
let x = 10;
square(x);
console.log(x); // 10(元の値は変わらない)
JavaScript2. 参照型(配列・オブジェクト)
- 関数に渡すときは「参照(アドレス)」が渡される
- 関数内で要素やプロパティを変更すると、呼び出し元の変数にも反映される
- 例:
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](元の配列も変わる)
JavaScript3. 注意点
- 基本型は「値渡し」、参照型は「参照渡し」のように振る舞う
- ただし、関数内で「新しい配列やオブジェクトを代入」した場合は、呼び出し元には影響しない
function resetArray(arr) {
arr = [0, 0, 0]; // 新しい配列を代入
}
let nums = [1, 2, 3];
resetArray(nums);
console.log(nums); // [1, 2, 3](元の配列はそのまま)
JavaScript初心者へのアドバイス
- 「基本型は安全、参照型は注意」と覚えると理解しやすい
- 配列やオブジェクトを関数に渡すときは、元のデータを壊していいのかを意識する
- 元のデータを守りたいときは、コピーを作ってから渡す(
slice()やスプレッド構文[...]を使う)
この知識は、バグを防ぐためにとても大事です。特に配列やオブジェクトを扱うときは「関数内での変更が外にも影響する」ことを意識しておくと安心です。
