Effective JavaScript Item 22は、argmentsを用いて可変パラメータリストを受け入れる関数を作成する.


このシリーズはEffective JavaScriptの読書ノートとして使われています.
 
Item 21では、apply方法に関連して実現される可変パラメータリスト関数averageを紹介したが、実際には一つの配列のみをパラメータとして宣言しているが、apply方法を利用して、実際にはいくつかの要素をパラメータとして受け入れることができる.
 
function averageOfArray(a) {
	for (var i = 0, sum = 0, n = a.length; i < n; i++) {
		sum += a[i];
	}
	return sum / n;
}
averageOfArray.apply(null, [1, 2, 3, 4, 5]);
アーグメンツ変数を利用して、宣言のパラメータも削除できます.すなわち関数は、任意のパラメータを明示的に宣言しないことができます.argmentsオブジェクトは、インデックスを使用してアクセスでき、length属性を持っていて、いくつかの要素が含まれていることを表しています.したがって、上の関数は、このように実現することができます.
function average() {
	for (var i = 0, sum = 0, n = arguments.length; i < n; i++) {
		sum += arguments[i];
	}
	return sum / n;
}
以上のステートメントは、average関数をより柔軟にしていますが、配列パラメータを処理する際には、appy方法と組み合わせる必要があります.
 
経験的な法則は、argments変数を利用した関数を提供すると同時に、パラメータの長さが固定されたバージョンも提供されます.前者は常に後者を利用することができるからです.
function average() {
	return averageOfArray(arguments);
}
このようにすると、ユーザは、appyメソッドを使用しないで、あなたが提供した関数を呼び出すことができます.アプリ方法を使うと、コードの一部の可読性と運転性能が失われるからです.
 
まとめ:
暗黙的なargmentsオブジェクトを使用して、可変長パラメータリストを受け入れる関数を実現した.
長いパラメータ関数を提供しながら、appy法の使用を避けるために、固定長パラメータの関数も提供される.