for 迴圈中setTimeout(function () { console.log(i)},100)中的非同步問題
上述程式碼執行完後,列印3次3,這是setTimeout是非同步執行的,會排在任務佇列中,只有主線上的全部執行完,才會執行任務佇列裡的任務,當主線執行完成後,i=3,所以列印3次3
那麼怎麼樣列印0,1,2呢?兩種方法:
1.使用let來定義i,i成為塊級變數,繫結到迴圈體的每一次迭代中
for (let i = 0; i < 3; i++) { setTimeout2.把setTimeout放到一個自執行的函式中去執行,將i作為引數傳進去
for (var i = 0; i < 3; i++) { (function (a) { setTimeout(function () { console.log(a); }, 100) }(i)) }