JavaScriptの関数オブジェクトを完璧に理解する
白石俊平(あゆた)
2008-04-11 16:00:00
JavaScript関数の実体は、Functionクラスのオブジェクトです。今回はFunctionクラスの機能を網羅的に解説します。
argumentsオブジェクト
関数が呼び出されると、引数をすべて格納した値として、関数内からはargumentsと言う変数を利用することができます。
argumentsの構造は、「引数に指定された値が順番に並んでいる配列」だと言えます。
以下に使用例を示します。引数を二つ取り、加算して返すadd()関数を想定してください。
function add(a, b) {
return a+b;
}
以下に示すのは、この関数をargumentsを使用するように書き換えたものです。
function add(a, b) {
return arguments[0] + arguments[1];
}
argumentsを用いれば、引数の数を固定しない、つまり「可変長引数」を実現することができます。以下に示すのは、引数として与えられた値をすべて合計して返す、と言う関数の例です。
function sum() {
var result = 0;
for (var i = 0, n = arguments.length; i < n; i++) {
result += arguments[i];
}
return result;
}
// 6が表示される
alert(sum(1, 2, 3));
先ほど、argumentsは「配列である」と申し上げましたが、厳密に言うとこれは間違いです。argumentsは以下のようなメンバを持つ、「配列に似た」(通常の)オブジェクトです。
- arguments.callee・・・この引数を与えられた関数自身
- arguments.length・・・与えられた引数の個数
- arguments.0〜n・・・nは正数値。引数が与えられた順序に対応した、正数値のプロパティ。
まとめと次回予告
今回は、JavaScriptの関数(Function)が持つ様々な機能について紹介しました。今回紹介した機能は、あまり頻繁に使うというものではありませんが、覚えておいて損になることは全くありません。やはり何といっても、JavaScriptの中核をなすのは「関数」という概念ですから。
次回は、今回のargumentsにも関連した話題として、「ローカル変数と変数のスコープチェイン」についてお話ししたいと思います。
- ホワイトペーパー



