可変長の引数リスト Argumentsオブジェクト

Web/JavaScript 講習会 part.10 (第一部 完) — ディノオープンラボラトリ」を見て参考になったところをメモ。今回で基礎編である第一部が終了らしい。第二部に移る前に今まで習ったところで消化しきれてない部分をまた復習しなくちゃ。


関数の本体では、arguments 識別子は特別な意味を持つ。


arguments は
・引数を管理する配列のようなオブジェクト
・関数実行時に自動的に決定する
・自己参照プロパティ callee を持っている

argumentsオブジェクトの利用例
(function() {
	function fn() {
		for(var i = 0; i < arguments.length; i++) {
			console.log(arguments[i]);
		}
	}
	fn("a", "b", "c", "d");
})();
// 実行結果
a
b
c
d


callee は現在実行中の関数を参照する。自分自身を参照しているんだね。考えられる利点はこの2つかな。
・関数名に依存しない
・無名関数のときも自己参照できる


だから、以下のコードは true を返す。

(function() {
	new function fn() {
		console.log(fn == arguments.callee);
	};
})();


自己参照といえば、再帰。再帰といえば階乗計算がお約束ということで実装。

calleeプロパティの利用例
(function() {
	function factorial(n) {
		return (n <= 1) ? 1 : n * arguments.callee(--n);
	}
	console.log(factorial(5));
})();
// 実行結果
120