我需要做以下任务。但是这总是仅警告“5”而不是1,2,3,4和5.我该如何解决这个问题?请帮忙。
for(var x=1; x<=5; x++){
something.load(function(result){
alert(x);
});
}
答案 0 :(得分:9)
这是由于关闭。运行回调时,它将以当前状态警告变量(因此在循环之后)。
要解决此问题,您可以创建一个新的闭包,它将保持变量状态。
for(var x=1; x<=5; x++){
(function(x) {
something.load(function(result){
alert(x);
});
}(x));
}
有关Closure的更完整说明,您可以参考此SO问题:How do JavaScript closures work?
或者本文由TC39(EcmaScript标准组织)http://www.2ality.com/2013/05/quirk-closures.html
的成员撰写