JavaScript 变量绑定和循环

14 浏览
0 Comments

JavaScript 变量绑定和循环

考虑以下循环:

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);
}

还有其他替代方案吗?

0