b. ステートメント 2:
ヒント: ステートメント 2 を省略する場合は、ループ内にブレークを指定する必要があります。そうしないとサイクルを停止できません。これによりブラウザがクラッシュする可能性があります。
c. i-- 判定について:
i--true/false を判定する場合、最初に i-- が判定され、次に i-- が計算されます。 i--の最後の判定に入る際、実際にi==0と判定された場合、判定後に再びi--が実行され、forループが終了したため、iの値は-1となりました。 var i = 1;
2. 変数 i を匿名関数自体に保存します
function init2() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i
(pAry) [i].onclick = function() {
alert(arguments.callee.i);
}).i = 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);
}
})();
}
}
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 インスタンスが生成されるたびにクロージャーが生成されます