我真的在範圍的概念掙扎在我的代碼。循環內的回調函數
我只是試圖創建一個'回調'函數,它將一個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