JavaScriptの関数の引数には様々な特徴があります。こうした特徴をきちんと把握しておくことも重要です。

 まず、JavaScriptでは関数に渡す引数の数はチェックされません。したがって、リスト13のようなコードもエラーにはなりません。

リスト13●リスト1のcalculateBmi関数に異なる個数の引数を渡した例
リスト13●リスト1のcalculateBmi関数に異なる個数の引数を渡した例
[画像のクリックで拡大表示]

 引数の数が足りない場合には、値が渡されなかった引数はundefinedになります。(1)ではheightがundefinedになるため、正常な計算ができなかったことを示す「NaN」という値になります。引数の数が多すぎる場合には余分な引数は無視されるため、(3)の呼び出しは正常な呼び出しである(2)と同じ結果になります。

 余分な引数は捨てられるわけではありません。JavaScriptでは、引数の数にかかわらず「関数に渡されたすべての引数のリスト」が保持されます。このため、余分な引数を後から参照することも可能です。

 この引数リストを管理するのがargumentsというオブジェクトです。argumentsは、関数の呼び出しとともに生成され、関数の中からだけ参照できる特別なオブジェクトです。リスト13の例では、表2のような値を保持しています。

表2●リスト13で生成されるargumentsオブジェクトの内容
表2●リスト13で生成されるargumentsオブジェクトの内容

 argumentsオブジェクトを利用することで、実際の処理の前に引数の個数をチェックすることもできます(リスト14)。argumentsオブジェクトのlengthプロパティは、関数に渡された引数の個数を表します。ここでは、lengthプロパティが2でない場合に例外を投げています。

リスト14●引数の個数をチェックするコード
リスト14●引数の個数をチェックするコード