<スクリプト言語="JavaScript">
//最初のパラメータ値
関数テスト(a,b,c,d){
アラート(引数[0]);
}
//arguments[0] は実際には a です。同様に、arguments[1] は b で、その後に c、d
が続きます。
<スクリプト言語="JavaScript">
{
関数 function_Name(exp1,exp2,exp3,exp4)
{
var umber="";
umber=arguments.length;
アラート(番号);
}
function_Name('a','b','c','d');
function_name( "a"、 "b"、 "c"、 "d");
}
1. JavaScript では、引数オブジェクトは実際には現在の関数の組み込みプロパティです。 argument は Array に非常に似ていますが、実際には Array インスタンスではありません。これは、次のコードで確認できます (もちろん、実際には関数 funcArg では、引数を呼び出すときに funcArg.arguments を記述する必要はなく、引数を直接記述するだけです)。
関数 funcArg() {
アラート(funcArg.arguments.testArg);
alert(funcArg.arguments[0]);
}
alert(new Array().testArg); // 結果: "テスト"
funcArg(10); // 結果: "未定義" "10"
2. 引数オブジェクトの長さは、仮パラメータの数ではなく実際のパラメータの数によって決まります。仮パラメータは、関数内のメモリ空間で再度開かれる変数ですが、引数オブジェクトのメモリ空間とは重なりません。引数と値の両方が存在する場合、2 つの値は同期されますが、どちらか一方に値がない場合、この値のないケースでは値は同期されません。以下のコードが確認できます。
コードをコピーします
コードは次のとおりです:
関数 f(a, b, c){
alert(arguments.length); // 結果: "2"
a = 100;
alert(arguments[0]); // 結果: "100"
引数[0] = "qqyumidi";
アラート(a); // 結果: "qqyumidi"
アラート(c); // 結果: "未定義"
c = 2012;
alert(arguments[2]); // 結果: "未定義"
}
f(1, 2);
3. JavaScript の関数の宣言と呼び出しの特性から、JavaScript の関数はオーバーロードできないことがわかります。
他の言語でのオーバーロードの根拠「関数の戻り値が異なる、または仮引数の数が異なる」に従って、上記の結論を導き出すことができます。
第一: Javascript 関数の宣言には戻り値の型がありません。
2 番目: 厳密に言えば、JavaScript の仮パラメータの数は関数内の変数操作を容易にするためだけのものであり、実際には、実際のパラメータはすでに引数オブジェクトに格納されています。
さらに、JavaScript の関数を JavaScript 関数自体からオーバーロードできない理由を深く理解しましょう。JavaScript では、関数は実際にはオブジェクトであり、関数名は関数への参照であるか、関数名自体が変数です。以下に示す関数宣言と関数式については、(関数宣言と関数式の違いを考慮せずに) 意味は上記と同じです。これは、JavaScript の関数がオーバーロードできないという特徴を理解するのに非常に役立ちます。
関数 f(a){
10 を返します;
}
関数 f(a){
- 10 を返します;
}
// 関数宣言と関数式の違いを考慮しないと、以下の
と同等になります。
var f = function(a){
10 を返します;
}
var f = function(a){
- 10 を返します;
}
4. 引数オブジェクトには、callee という非常に便利な属性があります。 argument.callee は、この引数オブジェクトが存在する現在の関数参照を返します。再帰的な関数呼び出しを使用する場合は、関数名自体の代わりに argument.callee を使用することをお勧めします。
は次のとおりです:
関数 count(a){
If(a==1){
1 を返す;
}
引数を返します。callee(--a);
}
var mm = count(10);
アラート(mm);