コードコピーは次のとおりです。
<スクリプト言語= "javascript">
//最初のパラメーター値。
関数テスト(A、B、C、D){
アラート(引数[0]);
}
//引数[0]は実際にはaです。同様に、引数[1]はB、C、Dです
</script>
コードコピーは次のとおりです。
<スクリプト言語= "javascript">
{
関数function_name(exp1、exp2、exp3、exp4)
{
var Umber = "";
umber = arguments.length;
アラート(umber);
}
function_name( 'a'、 'b'、 'c'、 'd');すべて呼び出すことができます
// function_name( "a"、 "b"、 "c"、 "d");呼び出すことができます
}
</script>
1。JavaScriptでは、引数オブジェクトは比較的特別なオブジェクトであり、実際には現在の関数の組み込みプロパティです。引数は配列に非常に似ていますが、実際には配列インスタンスではありません。次のコードで検証できます(実際、関数funcargでは、funcarg.argumentsとして引数を書くことは不要です。
コードコピーは次のとおりです。
array.prototype.testarg = "test";
関数funcarg(){
アラート(funcarg.arguments.testarg);
アラート(funcarg.arguments [0]);
}
alert(new Array()。testarg); //結果:「テスト」
Funcarg(10); // result:「未定義」「10」
2。引数オブジェクトの長さは、正式なパラメーターの数ではなく、実際のパラメーターの数によって決定されます。正式なパラメーターは、関数内のメモリスペースストレージを再開する変数ですが、引数オブジェクトのメモリスペースと重複していません。引数と値の両方が存在する場合、値は同期されますが、そのうちの1つでは、この価値のない状況に対して値は同期されません。次のコードを検証できます。
コードコピーは次のとおりです。
関数f(a、b、c){
アラート(arguments.length); // result: "2"
a = 100;
アラート(引数[0]); //結果: "100"
引数[0] = "qqyumidi";
アラート(a); //結果:「qqyumidi」
アラート(c); //結果:「未定義」
c = 2012;
アラート(引数[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。 arguments.calleeこの引数オブジェクトが存在する現在の関数参照を返します。再帰的な呼び出しを使用して機能する場合は、関数名自体の代わりにarguments.calleeを使用します。
次のように:
コードコピーは次のとおりです。
関数カウント(a){
if(a == 1){
返品1;
}
+ arguments.callee( - a)を返します。
}
var mm = count(10);
アラート(mm);