「引数」についてAIに説明してもらう下

前回、「引数」についてAIに説明してもらう上でJavascriptの「引数(ひきすう)」のさまざまな書き方についてAIに教えてもらいました。私が理解できていないことはその奥にあるような気がしたので、今回はさらに詳しく教えてもらいました。

引数とパラメータの違い

パラメータ(parameter)…関数定義時の変数名。

引数(argument)…関数呼び出し時に渡す値。

function greet(name) { // name がパラメータ
  console.log("Hello, " + name);
}

greet("Alice"); // "Alice" が引数

スプレッド構文と引数

スプレッド構文(…)とは

スプレッド構文は、配列やオブジェクトを展開する構文です。

引数への適用例(配列を複数の引数に展開)、これは sum(1, 2, 3) と同じです。

function sum(a, b, c) {
  return a + b + c;
}

const nums = [1, 2, 3];
console.log(sum(...nums)); // → 6

可変長引数(rest parameter)との違い

スプレッド構文

配列などを「展開」して渡す。

func(...arr);

restパラメータ

引数をまとめて「配列」として受け取る。

function func(...args) {
  console.log(args); // すべての引数が入った配列
}

func(1, 2, 3); // → [1, 2, 3]
用途記述場所意味
スプレッド構文関数呼び出し時配列を複数の引数に展開
restパラメータ関数定義時不定数の引数を1つの配列で受け取る

参照渡しと値渡しの違い

JavaScriptの関数引数は「値渡し」ですが、参照型の値渡しがあるため混乱しやすいです。

プリミティブ型(値渡し)

function change(x) {
  x = 100;
}
let a = 1;
change(a);
console.log(a); // → 1(元の値は変わらない)

オブジェクト・配列(参照の値渡し)

function modify(obj) {
  obj.name = "Bob";
}
let person = { name: "Alice" };
modify(person);
console.log(person.name); // → "Bob"(中身は変更される)

重要:参照自体が値として渡されている。つまり、「コピーされた参照」でオブジェクトを操作している。

ただし、参照自体を書き換えても元のオブジェクトは変わりません。


まとめ

特徴プリミティブ型オブジェクト・配列
値渡し✅(参照の値渡し)
値の書き換え✅(中身は書き換え可)
参照の再代入✅(意味なし)✅(元の変数に影響しない)

あわせて覚えるとよい用語まで教えてくれました。

追加で理解を深めるとよい用語

  • argumentsオブジェクトfunctionで暗黙的に得られる引数のリスト)
  • デフォルト引数:引数が渡されなかった場合の値を定義

※「デフォルト引数」は前回の「引数」についてAIに説明してもらう上 で教えてもらってました。

By

Posted in

Reply

メールアドレスが公開されることはありません。 が付いている欄は必須項目です