モジュールに次のコードがあります。
for (var i = 1; i <= n; i++) {
when = i * 1000;
track.execute(true, when); // <-- This line calls the method below
}
そして、別のモジュールのこの部分:
this.execute = function(on, when){
[...]
var createCallback = function(w){ // <-- Here 'when' should be bound to this function when is called below
return function(buffers){
object.doSomething(buffers, w);
}
};
[...] // None of this code modifies when or the callback 'factory'
this.asyncObj.getBuffer(createCallback(when)); // <-- Binding ?!?
};
問題は、when
呼び出しのたびに の値が更新されるため、メソッドが実行されたときに設定された値 (予期された動作) ではなく、常に最新の when の値でコールバックが実行されることです。
ご覧のとおり、私はこの質問で説明されているハックを既に試しました:ループ内の JavaScript クロージャー – シンプルで実用的な例ですが、うまくいきませんでした。
何らかの理由で、上記のコールバック関数は常に when の最新の値を取得します。
助けてくれる人に前もって感謝します!
PS: コールバックが毎回設定されているため、これが発生していると思います。したがって、毎回 when の最新の値が設定されます。確信はないけど。
更新:これを試してみるためのいじくり回しです...そしてそれはうまくいきます!http://tinker.io/dee10 (このコードは、私のコードの現在の状態をローカルに反映しています。とにかく、上記と同じことです)。