PR

 前に説明したように、argumentsオブジェクトはすべての引数を保持します。このため、arguments[0]にはtypeの値が入っています。そこで、可変長引数の部分だけを計算の対象にするために、forループではarguments[1]以降を足しています。  実際には、リスト17のようにすべてを可変長引数にするよう書いても動作します。しかし、これだと第1引数の意味がわかりにくくなってしまいます。必要なことがわかっている仮引数はできるだけ明確に記述し、あらかじめ個数を特定できないものだけを可変長引数にするよう心掛けましょう。

リスト17●リスト16をすべて可変長引数になるよう書き換えた例
リスト17●リスト16をすべて可変長引数になるよう書き換えた例

引数のデフォルト値を設定する

 リスト13の例で見たように、JavaScriptの関数は引数を省略して呼び出すことも可能です。しかし、そのままでは省略した引数がundefinedになってしまうため、引数を基にした処理ができません。この問題を防ぐには、省略可能な引数にデフォルト値を設定します。

 JavaScriptでは、引数のデフォルト値を表すための構文が特に用意されているわけではありません。関数の冒頭で引数をチェックし、undefinedだった場合にデフォルト値をセットするコードを書く必要があります(リスト18)。リスト18では、(1)の部分で、weightのデフォルト値を60、heightのデフォルト値を1.7にしています。

リスト18●引数weight/heightのデフォルト値を設定
リスト18●引数weight/heightのデフォルト値を設定

 デフォルト値をセットする代わりに、赤字の部分を以下のようなコードに置き換えれば、引数を指定していない場合に例外を飛ばすことができます。

throw {
 name: 'NoArgs',
 message: '(仮引数名)が指定されていません。'
};