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関数と呼ばれる