今日、常識に従ってループ内のイベントをバインドする 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)
}
または:
コードをコピー
コードは次のとおりです:
}
}
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; i
pAry[ i].onclick = function(arg) {
return function() { //関数を返します
alert(arg)
}
}(i); }
6. Function を使って実際に実装します。 Function インスタンスが生成されるたびにクロージャーが生成されます
var pAry = document.getElementsByTagName("p");
for( var i= 0; i
pAry[i].onclick = new Function ("alert(" i ");");//new は関数インスタンスを一度に生成します
🎜>}
7. Function を使用して実装します。6 との違いに注意してください
コードをコピー
コードは次のとおりです。 function init7() { var pAry = document. getElementsByTagName("p")
for( var i=0; i
pAry[i].onclick = Function('alert(' i ')')
}
}
概要が完了しました。ようこそ参加するために!