1. 程式人生 > >js非同步迴圈

js非同步迴圈

最近在專案上遇到的一個問題,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保護起來。