循环JS变量在函数内未显示正确的值。
循环JS变量在函数内未显示正确的值。
这个问题已经有答案了:
我需要执行以下任务。但这总是警报只有“5”,而不是1、2、3、4和5。如何解决这个问题?请帮助。
for(var x=1; x<=5; x++){ something.load(function(result){ alert(x); }); }
admin 更改状态以发布 2023年5月22日
这是由于闭包造成的。当回调函数被执行时,它会警报变量的当前状态(因此在循环之后)。
要解决这个问题,可以创建一个新的闭包来保持变量状态。
for(var x=1; x<=5; x++){ (function(x) { something.load(function(result){ alert(x); }); }(x)); }
有关闭包的更完整的解释,您可以参考这个 SO 问题:JavaScript闭包如何工作?
或这个 TC39(EcmaScript标准机构)成员的文章:http://www.2ality.com/2013/05/quirk-closures.html