ホームページ  >  記事  >  ウェブフロントエンド  >  javascript 引数 関数に渡される暗黙的なパラメータ_javascript ヒント

javascript 引数 関数に渡される暗黙的なパラメータ_javascript ヒント

WBOY
WBOYオリジナル
2016-05-16 18:47:51781ブラウズ

最初にこれを見たとき、これは「偽装された」通常のパラメータだと思いましたが、関数を定義するときに明示的に宣言する必要はありませんでした。
ただし、コードは安価です。) コードを見てください:
function funcTest(a, b) {
alert(a)
alert(b); 0 ; i alert(arguments[i]); }
}
関数 test() {
funcTest( 1 , 2 , 3); // 実行のために HTML ページに配置します
}
function funcTest(a, b) {
alert(a)
alert(b);
for ( var i = 0) ; i alert(arguments[i]); 関数 test() {
funcTest( 1 , 2 , 3 ); / 実行のために HTML ページに配置します
}
コードを実行すると、どのように表示されますか? はい、ここの長さは非常に奇妙ですよね?本に書いてあることを見てみましょう。「コードを実行すると、1、2、1、2、3の順に表示されます。したがって、関数を定義するとき、パラメータリストが指定されていない場合でも、取得されたパラメータは引数を介して参照することもできるため、プログラミングに大きな柔軟性がもたらされます。」この文ほど鋭い説明はありません。
これを見て、誰もが疑問を持つかもしれません (js プログラミングの知識が少しある場合)、引数パラメーターは js 配列オブジェクトのインスタンスですか?次のコードは、この疑問を解決するのに役立ちます:
Array.prototype.testArg = " test argument " ;
function funcArg() {
alert(arguments.testArg); test() {
alert( new Array().testArg);
funcArg();
Array.prototype.testArg = " テスト引数 " ;
alert(arguments.testArg);
}
function test() {
alert(new Array().testArg);
コード実行結果として、「テスト引数」と「未定義」が最初に表示されます。なぜ funcArg 呼び出しは「未定義」を返すのでしょうか。これを読んで、上記の疑問は解消されたと思います。
この時点ですべての議論をマスターしたと思いますか?これは、JS の才能あるデザイナーを過小評価しすぎです。別の才能のあるデザインを見てみましょう:
Q: 再帰を使用して 1 から n までの自然数の合計を計算します
A1:
関数sum( n) {
if ( 1 == n) return 1 ;
else return n sum(n - 1 );
function test() {
alert( 100 ) ); // 実行のために HTML ページに置きます
} function sum(n) {
if ( 1 == n) return 1 ;
else return n sum(n - 1 ) ;
}
function test() {
alert(sum( 100 )) ; // 実行用の HTML ページに配置します
}
A2:
function sum( n) {
if ( 1 == n) return 1 ;
else return n argument.callee(n - 1 );
function test() {
alert( 100 )); // 実行のために HTML ページに入れます
} function sum(n) {
if ( 1 == n) return 1 ;
else return n argument.callee(n - 1 );
}
function test() {
alert(sum( 100 )) // 実行のために HTML ページに入れます
}
答え A1 と A2 は両方とも解決しました問題は、最初の方法だと思います。この方法はほとんどの人にとって一般的な方法ですが、JS では 2 番目の方法を使用することをお勧めします。元の本には、このメソッド A1 には「関数に sum 自体の呼び出しが含まれています。ただし、JavaScript の場合」と書かれています。関数名は単なる変数名です。関数内で sum を呼び出すことはグローバル変数を呼び出すことと同じであり、「sum が sum を呼び出した」ということがうまく反映されません。それは自分自身を呼び出しています。なぜですか?
この本を使えば後悔は少なくなります。本を確認してください。「引数オブジェクトのもう 1 つの属性は callee で、これは関数オブジェクト自体への参照を表します。これは、名前のない関数の再帰を実装するのに役立ちます」私はこれが合理的であることを認めますが、本、特に技術書に対しては常に高い信頼を保っていますが、ここでは「引数オブジェクトのもう 1 つの属性は呼び出し先です」と言われています。 「引数」が「オブジェクト」になる?タイトルには「関数に渡される暗黙的なパラメータ: 引数」とありますが、これを間違ってコピーしたのでしょうか。電子書籍をチェックしてみてください。まだコピー アンド ペーストで間違いを犯すことがありますか?
物体、物体?オブジェクトがたくさんあるので、次の記事で「オブジェクト」を探してみましょう。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。