【发布时间】:2015-10-28 15:30:12
【问题描述】:
两者的主要区别是什么:
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 会“按预期”工作
谢谢!
【问题讨论】:
-
如果您知道第二个循环为什么会这样,那么您应该知道它与第一个循环有何不同。那么,有什么区别呢?第二个循环有什么问题?
-
第二个例子不起作用,因为有一个闭包。第一个示例通过为每次迭代创建一个函数来解决这个问题(从而创建一个新范围)
-
@ValentinS.:为防止任何误解:第一个示例中仍然存在闭包。
-
是的。我道歉。实际上,第一个示例并没有以不创建闭包的方式进行修复,而是以避免闭包的影响的方式进行了修复。
标签: javascript jquery loops asynchronous