어떤 이유로 든 pageNumber는 loopCounter에 대한 루프의 마지막 값이됩니다. 이제는 closure 자체에서 loopCounter를 직접 사용하고 있지만 그렇지 않다는 것을 이해할 수 있습니다. 아래 코드에서 알 수 있듯이 closure에서 loopCounter의 현재 값을 가져 오는 새 변수를 만듭니다.수정 된 클로저 문제에 대한 접근 가능성 ... 이길 방법?
(JavaScript가 모든 것을 참조 유형으로 취급한다고 가정하면) pageNumber는 loopCounter에 대한 참조를 취하고 있으므로 새 pageNumber를 여러 번 만들지도 않고 항상 loopCounter 객체를 가리키고 있습니다. 따라서 loopCounter가 끝나는 값은 pageNumber가 가리키는 값이됩니다.
어떻게 loopCounter를 가리 키지 않고 현재 loopCounter 값을 보유하는 반복마다 새 pageNumber를 만드나요?
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)
);
result.StartingPoint 무엇을 쓸 수 있을까? –
비동기 메서드 호출에서 반환 된 개체를 반환합니다. –