之间的主要区别是:
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按预期工作'
谢谢!
答案 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);
}