我会直截了当:我有这个循环:
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 上阅读了数十个答案,但我无法弄清楚这一点。这是我第二次遇到这种回调问题,所以,在这一点上,我想我还没有完全理解发生了什么。
您能否向我解释一下上面的代码应该有什么问题?先感谢您。