何らかの理由で、何があっても、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);
};
...
}
SOLUTION
ありがとう:
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は何を書くことができますか? –
非同期メソッド呼び出しから返されたオブジェクトです。 –