Looping JS variable doesn't show the correct value inside the function
本问题已经有最佳答案,请猛点这里访问。
我需要做以下任务。 但是这总是仅警告"5"而不是1,2,3,4和5.我该如何解决这个问题? 请帮忙。
1 2 3 4 5 | for(var x=1; x<=5; x++){ something.load(function(result){ alert(x); }); } |
这是由于关闭。 当运行回调时,它将警告变量处于其当前状态(因此在循环之后)。
要解决这个问题,您可以创建一个新的闭包来保持变量状态。
1 2 3 4 5 6 7 | for(var x=1; x<=5; x++){ (function(x) { something.load(function(result){ alert(x); }); }(x)); } |
有关Closure的更完整说明,您可以参考这个问题:JavaScript闭包如何工作?
或者本文由TC39成员(EcmaScript标准组织)http://www.2ality.com/2013/05/quirk-closures.html