前回、「引数」について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に説明してもらう上 で教えてもらってました。

Reply