JavaScript 〜 今更ながらArgumentsオブジェクトについて調べた
MDCによれば、argumentsは全ての関数内で利用可能なローカル変数であり、プロパティには下記がある。
arguments.callee: 現在実行している関数の関数本体を示す。
arguments.caller 非推奨 : 現在実行している関数を呼び出した関数の名前を示す。
arguments.length: 関数に渡された引数の数を示す。
まず、arguments.lengthを利用すれば、任意の数の引数を受け取ることが可能な関数*1を定義することができる。
例えば、次の例は任意の数を受け取って、最大値を返す関数である。
function max(/* ... */){ var max = Number.NEGATIVE_INFINITY; for(var i = 0; i<arguments.length; i++){ if(arguments[i] > max){ max = arguments[i]; } } //最大値を返却 return max; };
また、arguments.calleeを利用すれば、無名関数であっても再帰関数を作成することができる。
次の例は、階乗を計算する関数である。
function(x){ if(x<=1){ return 1; }else{ return x * arguments.callee(x-1); } }
*1:可変長引数関数やvarargs関数と呼ばれる