Я действительно борюсь с концепцией области видимости в своем коде.функция обратного вызова в цикле
Я просто пытаюсь создать функцию «обратного вызова», которая добавит имя класса к переменной. Поскольку он находится внутри функции, я передаю глобальную переменную в качестве параметров функции обратного вызова, используя концепцию закрытия (все еще не понимаю, как работает замыкание).
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);
}
}
Может кто-нибудь объяснить, почему функция закрытия. выполняется неправильно, т. е. он всегда успешно добавляет имя класса «cPressCuttingsDisplay00», но не следует за этим с классомName «cPressCuttingsDisplay01» для следующей итерации цикла.
Я не вижу каких-либо обратного вызова или необходимость закрытия здесь. Ваша анонимная функция не делает ничего другого, чем если бы вы только что получили свое тело прямо в своем цикле. – Jacob
Не могли бы вы объяснить, что должен делать этот код? Я подозреваю, что есть способ упростить его. – Jacob
Обратите внимание, что новая область для переменных создается только путем ввода функции, а не внутри блоков, например, для циклов или блоков. Также см .: http://bonsaiden.github.com/JavaScript-Garden/#function.closures – GregL