我在一个模块中有这段代码:
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(这段代码在本地反映了我的代码的当前状态。反正和上面一样)。