考虑这样的循环:
for(var it = 0; it < 2; it++) { setTimeout(function() { alert(it); }, 1); }
输出为:
=> 2 => 2
我希望它是:0、1。我看到两种解决方法:
解决方案#1。
这一事实基于我们可以将数据传递给setTimeout的事实。
for(var it = 0; it < 2; it++) { setTimeout(function(data) { alert(data); }, 1, it); }
解决方案#2。
function foo(data) { setTimeout(function() { alert(data); }, 1); } for(var it = 0; it < 2; it++) { foo(it); }
还有其他选择吗?
除了您提出的两种方法外,没有什么其他的,但这是另一种方法
for(var it = 0; it < 2; it++) { (function() { var m = it; setTimeout(function() { alert(m); }, 1); })(); }
本质上,您需要捕获闭包中的变量值。此方法使用立即调用的匿名函数将it本地变量中的外部变量值捕获m。
it
m