ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript クロージャパラメータの受け渡しとイベントループバインディングに関するディスカッション example_javascript スキル

JavaScript クロージャパラメータの受け渡しとイベントループバインディングに関するディスカッション example_javascript スキル

WBOY
WBOYオリジナル
2016-05-16 16:52:011073ブラウズ

今日、常識に従ってループ内のイベントをバインドする JavaScript の質問を見ましたが、結果は私が望んでいたものではありませんでした。

コードをコピー コードは次のとおりです:

for (文 1, 文 2, 文 3) {

//todo

}

a.for ループ条件

一般に、ステートメント 1、ステートメント 2、およびステートメント 3 はすべてオプションです。

b. ステートメント 2:

通常、ステートメント 2 は初期変数の条件を評価するために使用されます。

ステートメント 2 もオプションです。

ステートメント 2 が true を返した場合はループが再開され、false を返した場合はループが終了します。

ヒント: ステートメント 2 を省略する場合は、ループ内にブレークを指定する必要があります。そうしないとサイクルを停止できません。これによりブラウザがクラッシュする可能性があります。

c. i-- 判定について:

i--true/false を判定する場合、最初に i-- が判定され、次に i-- が計算されます。 i--の最後の判定に入る際、実際にi==0と判定された場合、判定後に再びi--が実行され、forループが終了したため、iの値は-1となりました。 var i = 1;

!!i--;//ture

解決策:




コードをコピー


コードは次のとおりです:
}
})(i)
}


または:




コードをコピー

コードは次のとおりです:
var as = document.getElementsByTagName('a'); for ( var i = as.length; i--; ) { var a = function(i){ as[ i].onclick = function( ) { alert(i); return
}
}
a(i);


他のネチズンは 7 メソッドのデモで解決しました:




コードをコピー

コードは次のとおりです:


2. 変数 i を匿名関数自体に保存します
コードをコピーします コードは次のとおりです:

function init2() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i(pAry) [i].onclick = function() {
alert(arguments.callee.i);
}).i = i
}
}

3 、クロージャの層を追加し、i は関数パラメータの形式で内部関数に渡されます
コードをコピー コードは次のとおりです

function init3() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i(function( arg){
pAry[i].onclick = function() {
alert(arg);
};
})(i);// パラメータcall
}
}

4. クロージャーの層を追加し、ローカル変数
コードをコピー コードは次のとおりです。
function init4() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i(function () {
var temp = i; //呼び出し時のローカル変数
pAry[i].onclick = function() {
alert(temp);
}
})();
}
}

5.応答イベントとして関数を返します (3 との微妙な違いに注意してください)

コードをコピー コードは次のとおりです:
function init5() {
var pAry = document .getElementsByTagName("p");
for( var i=0; ipAry[ i].onclick = function(arg) {
return function() { //関数を返します
alert(arg)
}
}(i); }


6. Function を使って実際に実装します。 Function インスタンスが生成されるたびにクロージャーが生成されます


コードをコピー コードは次のとおりです。 function init6() {
var pAry = document.getElementsByTagName("p");
for( var i= 0; ipAry[i].onclick = new Function ("alert(" i ");");//new は関数インスタンスを一度に生成します
🎜>}


7. Function を使用して実装します。6 との違いに注意してください



コードをコピー
コードは次のとおりです。 function init7() { var pAry = document. getElementsByTagName("p")
for( var i=0; ipAry[i].onclick = Function('alert(' i ')')
}
}


概要が完了しました。ようこそ参加するために!
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:jquery checkbox チェックボックスでdeletion前の判定を実現_jquery次の記事:jquery checkbox チェックボックスでdeletion前の判定を実現_jquery

関連記事

続きを見る