我遇到了这样一个片段
(function(){ for(var i=0;i<3;i++){ setTimeout(function(){ console.log(i) }) } }())
我希望它记录1,2 ....而不是它记录3.不确定这是因为js beign单线程,并且只在完成循环后查找队列.
工作复印
这是因为JavaScript以某种async
方式执行.在console.log(i)
执行时,for loop
完成其迭代并且由于JavaScript没有块级范围,因此i
in 的值console.log(i)
变为3
所有迭代.
解决方法是使用IIFE并传入i
范围:
for (var i = 0; i < 3; i++) {
(function(i) {
setTimeout(function() {
console.log(i)
});
})(i);
}