最近在项目上遇到的一个问题,js怎么实现多文件并发上传,java的惯性思维认为for循环只能是同步的,万万没想到js中万物皆异步,写个小例子记录一下。
for (var i = 0; i <= 10; i++){
(function (arg) {
setTimeout(console.log(arg), Math.random() * 5000);
})(i);
}
执行结果千奇百怪,for并没有等待timeout完成而是直接进行下一轮循环,太神奇了。
这里有个坑,如果按照正常的思维去写的话,for循环打出来的i永远是最后一个值11,这就是js的闭包问题了,这里采取自执行函数的方法将i保护起来。