jquery $ .each vs for循环(带有异步内容)

时间:2015-10-28 15:30:13

标签: javascript jquery loops asynchronous

之间的主要区别是:

    var test=[5,6,7,8,9];
    $.each(test, function (i, num) {
        setTimeout(function(){console.log('i: '+i+'  '+num)},500);
    });
    for (var j = 0; j < test.length; j++) {
        setTimeout(function(){console.log('j: '+j+'  '+test[j])},500);
    }

第一个循环输出:

i: 0  5
i: 1  6
i: 2  7
i: 3  8
i: 4  9

第二个循环输出:

5次'j: 5 undefined'

我理解为什么第二个循环会这样做,但不是为什么$ .each按预期工作'

谢谢!

1 个答案:

答案 0 :(得分:1)

在场景后面的第一个片段中,对于每次迭代,将调用您提供的回调。这意味着,在内部它将为每次迭代创建一个范围。这最终会成为一种混乱。

但是在第二个片段中。在触发超时的回叫时将使用初始范围。所以它显示了输出。您可以使用以下代码使其工作

for (var j = 0;j<test.length-1;j++) {
 var scope = function(i) { 
  setTimeout(function(){console.log('j: '+i+'  '+test[i])},500);
 };
 scope(j);
}