要点を説明します: 私はこのループを持っています:
for (var i = 1; i <= toSchedule; i++) {
when = trackWrapper.lastPlay +
(trackDuration +
(looper.timeInterval - trackDuration));
track.play(true, when);
trackWrapper.lastPlay = when;
}
play
メソッドの本体には次のように記述されています。
[...]
// Here when is a different value for each call (verified)
// Many calls of the play method are performed before the returned function below is run as a callback
function playingCallback(myWhen){
return function(buffers){
// Here myWhen will always be equal to the value of the last call occurred BEFORE the first callback execution
console.log("myWhen = "+myWhen);
[...]
};
};
var realCallback = playingCallback(when);
track.scheduled.push(when);
track.recorder.getBuffer(realCallback);
たとえば、次のようになります。
play(true, 1);
play(true, 2);
play(true, 3);
// Wait for it...
myWhen = 3;
myWhen = 3;
myWhen = 3;
今:私はクロージャーについて読んだ、「悪名高いループの問題」について読んだ、ここStackOverflowで何十もの答えを読んだが、これを理解できなかった. コールバックでこの種の問題が発生するのは 2 回目なので、現時点では、何が起こっているのか完全には理解できていないと思います。
上記のコードのどこが間違っているのか教えてください。前もって感謝します。