読者です 読者をやめる 読者になる 読者になる

ほげほげ(仮)

仮死状態

Argumentsオブジェクト

JavaScript


JavaScriptの関数は定義されている引数と

実際に関数を実行する際に渡す関数が一致していなくてもエラーは起きずに実行可能です。


例えば下のソースも問題なく動きます。

function func() {
    // なんかの処理
}
func('a', 'b');


便利といえば便利かもしまれませんが、逆にちゃんと引数を渡して欲しい場合のほうが多いでしょう。


こういう場合にArgumentsオブジェクトを利用します。

Argumentsオブジェクトは配列のようなオブジェクトで引数の情報を持ちます。


次のように書くと引数の個数が取得できます。

function func() {
    alert(arguments.length);
}
func('a');              // ←1が表示される
func('a', 'b', 'c');    // ←3が表示される


次のように書く事で引数の値も取得できます。

function func() {
    for(var i = 0; i < arguments.length; i++) {
        alert(arguments[i]);    // ←引数が順番に表示される
    }
}


これを利用して次のようなことも出来ます。

function sum() {
    var s = 0;
    for(var i = 0; i < arguments.length; i++) {
        s += arguments[i];
    }
    alert(s);    // ←「15」が表示される
}
sum(1, 2, 3, 4, 5);


また、Argumentsオブジェクトはcalleeというプロパティを持ちます。

calleeは実行中の関数の情報を持ちます。


次のように書くと、関数の情報が表示されます。

function func() {
    alert(arguments.callee);
}


次のように再帰処理も可能です。

function func(x) {
    // なんかの処理
    arguments.callee();
}


Argumentsオブジェクトは使い方によっては非常に便利だとは思いますが、なかなか使いどころが難しいかもしれません。

補足

Argumentsオブジェクトは配列のようなオブジェクトではありますが、配列とは異なる部分があります。


次のようなソースを実行した場合

function func(x) {
    alert(x);            // ←「a」と表示される
    arguments[0] = 'b';
    alert(x);            // ←「b」と表示される
}
func('a');


実行結果から分かるとおり、引数の変数を上書きしています。

通常の配列ではこのような動作はしないはずです。