0

モジュールに次のコードがあります。

    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 (このコードは、私のコードの現在の状態をローカルに反映しています。とにかく、上記と同じことです)。

4

1 に答える 1