Core JavaScript 1.5 Reference:Functions:arguments
出典: MDC
目次 |
[編集] 概要
関数へ渡された引数に対応する配列のようなオブジェクト。
| すべての関数内でのローカル変数および Function の非推奨のプロパティ | |
|---|---|
| 実装されたバージョン: | JavaScript 1.1, NES 2.0
JavaScript 1.2: JavaScript 1.3: Function のプロパティとしての arguments、arguments.callee、および arguments.length を非推奨とする。関数のローカル変数としての arguments、およびこの変数のプロパティとしての arguments.callee と arguments.length はそのまま維持。 |
| ECMA バージョン: | ECMA-262 |
[編集] 説明
arguments はすべての関数内で利用可能なローカル変数です。Function のプロパティとしての arguments はもはや使用されません。
arguments オブジェクトを使うことにより、関数内で関数の引数を参照できます。このオブジェクトは、関数に渡された各引数に対する入力を含みます。最初の入力の添え字は 0 から始まります。たとえば、もし関数に 3 つの引数が渡されたなら、次のようにその引数を参照できます:
arguments[0] arguments[1] arguments[2]
引数を設定することもできます:
arguments[1] = 'new value';
n が仮引数または実引数の数より大きかったなら、arguments[n] を設定できないというバグがありました。これは JavaScript 1.6 用のエンジンで修正されました。arguments オブジェクトは配列ではありません。これは配列と似ていますが、length 以外のどんな配列のプロパティも持ちません。たとえば、これは pop メソッドを持ちません。しかしながら、これは本当の配列に変換できます:
var args = Array.prototype.slice.call(arguments);
arguments オブジェクトは関数本体の中でのみ利用可能です。関数宣言の外部で arguments オブジェクトにアクセスを試みると、エラーを引き起こします。
形式的に受け入れるよう宣言されたのよりも多くの引数を用いて関数を呼び出すなら、arguments オブジェクトが使えます。この技法は、可変数の引数を渡されることのある関数に役立ちます。関数に渡された引数の数を測るために arguments.length が使え、それから arguments オブジェクトを使って各引数を処理できます。(関数が定義されたときに宣言された引数の数を測るためには、Function.length プロパティを使ってください。)
[編集] プロパティ
arguments.callee: 現在実行している関数の関数本体を示す。
arguments.caller 非推奨 : 現在実行している関数を呼び出した関数の名前を示す。
arguments.length: 関数に渡された引数の数を示す。
[編集] 後方互換性
[編集] JavaScript 1.3 およびそれ以前のバージョン
ローカル変数として利用可能なのに加えて、arguments オブジェクトは Function オブジェクトのプロパティでもあり、関数名を前に置くこともできます。たとえば、もし関数 myFunc に arg1、arg2、および arg3 という名の 3 つの引数が渡されたなら、次のように引数を参照できます:
myFunc.arguments[0] myFunc.arguments[1] myFunc.arguments[2]
[編集] JavaScript 1.1 および 1.2
JavaScript 1.1 および JavaScript 1.2 で利用可能だった次の機能は削除されました。:
- 関数の各ローカル変数は
argumentsオブジェクトのプロパティです。たとえば、もし関数myFuncがmyLocalVarという名のローカル変数を持っていたなら、その変数をarguments.myLocalVarとして参照できます。
- 関数の各仮引数は
argumentsオブジェクトのプロパティです。たとえば、もし関数myFuncがarg1およびarg2という名の 2 つの引数を持っていたなら、その引数をarguments.arg1およびarguments.arg2として参照できます。(それらをarguments[0]およびarguments[1]として参照することもできます。)
[編集] 例
[編集] 例: 複数の文字列を連結する関数を定義する
この例では、複数の文字列を連結する関数を定義します。この関数の唯一の仮引数は、連結する項目を区切る文字を指定する文字列です。この関数は次のように定義されます:
function myConcat(separator) {
var result = "";
// 区切りでない引数を反復する
for (var i = 1; i < arguments.length; i++)
result += arguments[i] + separator;
return result;
}
この関数へ任意の数の引数を渡すことができ、各引数をリストの項目として使うリストを作れます。
// "red, orange, blue, " を返す
myConcat(", ", "red", "orange", "blue");
// "elephant; giraffe; lion; cheetah; " を返す
myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
// "sage. basil. oregano. pepper. parsley. " を返す
myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");
[編集] 例: HTML リストを作る関数を定義する
この例では、リストのための HTML を含む文字列を作る関数を定義します。この関数の唯一の仮引数は、リストが順不同 (中黒付き) なら "u"、順序付き (番号付き) なら "o" である文字列です。この関数は次のように定義されます:
function list(type) {
var result = "<" + type + "l>";
// リスト形式でない引数を反復する
for (var i = 1; i < arguments.length; i++)
result += "<li>" + arguments[i] + "</li>";
result += "</" + type + "l>"; // リストの終了
return result;
}
この関数へ任意の数を渡すことができ、指定されたリスト形式のリストに各引数を項目として追加します。たとえば:
var listHTML = list("u", "One", "Two", "Three");
// listHTML は "<ul><li>One</li><li>Two</li><li>Three</li></ul>"