我真的在范围的概念挣扎在我的代码。循环内的回调函数
我只是试图创建一个'回调'函数,它将一个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);
}
}
有人可以解释为什么关闭功能。没有正确执行,即它总是成功地添加className“cPressCuttingsDisplay00”,但不会在下一次循环迭代时使用“cPressCuttingsDisplay01”的className。
我没有看到任何形式的回调或需要关闭这里。你的匿名函数与你的循环中直接使用它的主体没有任何不同。 – Jacob
你能解释一下这段代码应该做什么吗?我怀疑有一种方法可以简化它。 – Jacob
请注意,只有通过输入函数才能创建变量的新作用域,而不是像for循环或块一样在块内创建。另见:http://bonsaiden.github.com/JavaScript-Garden/#function.closures – GregL