使用自执行匿名函数解决在for循环中使用闭包的问题

此代码输出为10 10,而不是预期的0到9,因为闭包是对i的引用,然后当函数执行时,i已变成10。




函数f1(){
对于(var i = 0;i < 10;i + +){
setTimeout(){()函数(
警报(一);
},1000);
}
}
(F1);


为了解决上述问题,可以使用自执行匿名函数。




函数F2(){
对于(var i = 0;i < 10;i + +){
(函数(e){)
setTimeout(){()函数(
警报(e);
},1000);
})(一);
}
}
(F2);


这里的匿名函数将i作为参数,而E中有i的副本,引用是对e的引用,从而避免了上述问题。