JavaScriptのforサイクルは常に最大値の問題を出力するいくつかの解決方法です.
6201 ワード
もし私たちがタブを作ったら、それぞれのliをクリックして切り替えられますが、この時にforサイクルを使って対応するli値を取得した時、一つの問題が見つかりました.つまり、どのliをクリックしても、それはいつも最後の値を出力します.この問題を解決する方法は次のいくつかあります.
ここはhtmlの部分コードです.三つのliでデモします.
ここはhtmlの部分コードです.三つのliでデモします.
<ul id="box">
<li>1li>
<li>2li>
<li>3li>
ul>
<script>
window.onload = function(){
var oul = document.getElementById('box');
var oli = oul.getElementsByTagName('li');
// js
......
script>
以下はjavascriptの実現コードです.// 1: ,i
for(var i=0;ifunction(j){
oli[i].onclick = function(){
console.log(j);
}
})(i);//
}
// 2: ,i
for(var i=0;ifunction(){
var tmp = i;//
oli[i].onclick = function(){
console.log(tmp);
}
})();
}
// 3: ,
for(var i=0;ifunction(arg){
return function(){//
console.log(arg);
}
}(i);
}
// 4: i li
for(var i=0;i//index
oli[i].onclick = function(){
console.log(this.index);
}
}
// 5: i
for(var i=0;ifunction(){
console.log(arguments.callee.index);
}).index = i;//index
}
caleeは実行中のFunctionオブジェクト、すなわち指定されたFunctionオブジェクトの本文を返します.calee属性は、関数オブジェクト自体に対する参照を表すアーグメンントオブジェクトのメンバーです.// 6: Function ,
for(var i=0;inew Function("console.log("+i+");");
}
//Function("console.log("+i+");")
//function anonymous() {
//console.log(i);
//}
ECMAScriptはFunctionクラスで直接関数を作成する文法:var function_name = new Function(arg1, arg2, ..., argN, function_body);
上記の形態では、各argは一つのパラメータであり、最後のパラメータは関数本体(実行するコード)である.このように関数を構成すると、function_を出力します.nameは、関数全体の本当のエンティティを見ることができます.以下のとおりです// , , function_body
//console.log(arg1+arg2), ,
function anonymous(arg1,arg2
/*``*/) {
console.log(arg1+arg2);
}
// 7: Function , 6
for(var i=0;iFunction("console.log("+i+");");
}