在JS的 for、foreach、$.each等等的循环体中,本身是不存在阻塞模式的,以下方法本质的原因,是因为匿名函数使用循环体的变量的优先级最高,而普通方式访问的对变量优先级是按代码本身的逻辑顺序的,对变量的访问在循环之后,所以得到的i是循环执行完之后的i,所以不是正确结果;
然而,直接执行匿名函数的方式当场就拿到了正确的i,闭包的方式也是因为将外部函数的变量保存在内存中,从而可以得到正确的i变量。
如以下代码:
for(var i=0;i<100;i++){
(function(i){
//do something
})(i);
}