私は自分のコードでスコープの概念に本当に苦労しています。ループ内のコールバック関数
私は変数にclassNameを追加する 'コールバック'関数を作成しようとしています。それは関数の中にあるので、クロージャの概念を使用してコールバック関数にパラメータとしてグローバル変数を渡しています(クロージャの仕組みを理解できていません)。
var ePressCuttingsArray = $(".cPressCuttings");
var eSelectedPressCuttingsArray = [];
var iIndexArray = [];
for (var i = 0; i < 7; i++) {
var iIndexArrayValue;
// two conditions being checked in while loop, if random no. is not in global array (iIndexArray) & i var is equal to eSelectedPress... array
while (jQuery.inArray(((iIndexArrayValue = Math.floor(Math.random() * 14) + 1), iIndexArray) === -1)
&& (i === eSelectedPressCuttingsArray.length))
{
// to push a value at a position from array ePressCut... into eSelectedPress... array
eSelectedPressCuttingsArray.push(ePressCuttingsArray[iIndexArrayValue]);
// run a function to addClass to the recently pushed value in eSelectedPress... array
(function (i) {
$(eSelectedPressCuttingsArray[i]).addClass("cPressCuttingsDisplay0" + i)
} (i));
iIndexArray.push(iIndexArrayValue);
}
}
なぜ誰かがクロージャーfuncを説明できますか。 ClassName "cPressCuttingsDisplay00"は常に正常に追加されますが、次のループ反復のclassNameが "cPressCuttingsDisplay01"であることはありません。
私は、コールバックの任意の並べ替えが表示されないか、ここに閉鎖するために必要。あなたの無名関数は、あなたのループ内に直接その本体がある場合とは何も変わりません。 – Jacob
このコードが何をすべきか説明できますか?私はそれを単純化する方法があると思う。 – Jacob
変数の新しいスコープは、forループやifブロックのようなブロック内ではなく、関数を入力することによってのみ作成されることに注意してください。 http://bonsaiden.github.com/JavaScript-Garden/#function.closures – GregL