関数まわりの「ちょっと特殊な性質」を整理しておくと、JavaScript の理解がグッと深まります。初心者向けに、代表的なものをわかりやすくまとめますね。
関数関連の便利な仕組み・プロパティ
1. arguments オブジェクト
- 何か?
関数の中で自動的に使える「配列っぽいオブジェクト」。呼び出し時に渡された引数が全部入っている。 - 特徴
- 配列に似ているけど完全な配列ではない(
mapやfilterは使えない)。 arguments.lengthで「実際に渡された引数の数」がわかる。
- 配列に似ているけど完全な配列ではない(
- 例
function showArgs() {
console.log(arguments[0]); // 最初の引数
console.log(arguments.length); // 渡された数
}
showArgs("A", "B", "C");
// => "A"
// => 3
JavaScript2. caller プロパティ
- 何か?
関数が「どの関数から呼ばれたか」を参照できるプロパティ。 - 注意点
- セキュリティや最適化の理由で、最近の JavaScript ではあまり推奨されない。
- 使わなくても困らないことが多い。
- 例
function foo() {
console.log(foo.caller); // 呼び出し元の関数を表示
}
function bar() {
foo();
}
bar(); // => bar 関数の定義が表示される
JavaScript3. デフォルト引数
- 何か?
引数が渡されなかったときに「初期値」を設定できる仕組み。 - メリット
undefinedチェックを自分で書かなくてよい。
- 例
function greet(name = "ゲスト") {
console.log("こんにちは、" + name + "さん!");
}
greet("太郎"); // => こんにちは、太郎さん!
greet(); // => こんにちは、ゲストさん!
JavaScript4. 可変長引数(rest パラメータ)
- 何か?
...を使って「残りの引数を全部まとめて配列にする」仕組み。 - メリット
- 引数の数が決まっていない関数を簡単に書ける。
- 例
function sum(...numbers) {
return numbers.reduce((total, n) => total + n, 0);
}
console.log(sum(1, 2, 3)); // 6
console.log(sum(10, 20, 30)); // 60
JavaScriptまとめ
arguments→ 実際に渡された引数を全部見る(配列風)。caller→ 呼び出し元の関数を参照(ただし非推奨)。- デフォルト引数 → 引数が省略されたときの初期値を設定。
- 可変長引数(rest) →
...で残りの引数を配列として受け取る。
初心者の方はまず デフォルト引数 と rest パラメータ を積極的に使うのがおすすめです。arguments は古いコードでよく出てくるので「読み解くために知っておく」、caller は「存在だけ知っておく」で十分。
