По какой-то причине, независимо от того, что pageNumber заканчивается последним значением в цикле для loopCounter. Теперь я бы понял, что если бы я непосредственно использовал loopCounter в самом замыкании, но это не так. Как вы можете видеть из кода ниже, я создаю новую переменную внутри замыкания, чтобы принять текущее значение loopCounter.
Единственное, что я могу понять, это (при условии, что javascript обрабатывает все как ссылочный тип), что pageNumber принимает ссылку на loopCounter, поэтому независимо от того, сколько раз я создаю новый pageNumber, он всегда указывает на объект loopCounter. Следовательно, любое значение loopCounter, которое заканчивается в конце, будет значением, на которое будет указывать любой pageNumber.
Как мне сделать так, чтобы он не указывал на loopCounter, а создавал новый pageNumber для каждой итерации, содержащий текущее значение loopCounter?
for (var loopCounter = result.StartingPoint; loopCounter <= result.HighestPageCount; loopCounter++)
{
...
var newDiv = document.createElement('div');
...
//trying to remove the reference to loopCounter
var pageNumber = loopCounter;
newDiv.onclick =
function(event)
{ //Right here ---V
getResultUsingUrl(result.PagerPreLink + "&pageNumber=" + pageNumber);
};
...
}
РЕШЕНИЕ
Благодаря паре ответов ниже:
function createClickMethod(loopCounter, link)
{
var pageNumber = loopCounter;
return function(event) { getResultUsingUrl(link + "&pageNumber=" + pageNumber); };
}
и я могу позвонить как:
newDiv.onclick = createClickMethod(loopCounter, result.PagerPreLink);
Или, если я хочу использовать jQuery ... предлагается ниже:
jQuery(newDiv).click
(
createClickMethod(loopCounter, result.PagerPreLink)
);