我需要执行以下任务。但这总是只提醒“5”而不是 1、2、3、4 和 5。我该如何解决这个问题?请帮忙。
for(var x=1; x<=5; x++){
something.load(function(result){
alert(x);
});
}
我需要执行以下任务。但这总是只提醒“5”而不是 1、2、3、4 和 5。我该如何解决这个问题?请帮忙。
for(var x=1; x<=5; x++){
something.load(function(result){
alert(x);
});
}
这是由于关闭。当回调运行时,它会提醒变量处于其当前状态(所以在循环之后)。
要解决此问题,您可以创建一个新的闭包来保持变量状态。
for(var x=1; x<=5; x++){
(function(x) {
something.load(function(result){
alert(x);
});
}(x));
}
有关 Closure 的更完整解释,您可以参考这个 SO 问题:JavaScript 闭包如何工作?
或者这篇文章来自 TC39(EcmaScript 标准机构)的成员http://www.2ality.com/2013/05/quirk-closures.html