for (var i = 0; i < 10; i++) { setTimeout(function() { console.log(i); }, 100 * i); }
想一想打印結果是啥?閉包
沒錯是10次10,爲何不是咱們想要的0,1,2,3,4,5,6,7,8,9?
開始我也很納悶,一直想不明白。找了不少資料才終於想明白了。其實網上說的不少什麼異步,閉包等等,我以爲解釋的不是很容易明白。異步
其實簡單點來講:
1.這個for循環確定是循環10次的,因此結果爲何是10個10
2.由於setTimeout方法是在for循環結束以後再執行的,for循環很是的快,結束以後的i是10.
3.在這個for循環當中的setTimeout是會執行10次的。因此結果10個10,可能這樣還很多很明白。咱們改一下這個例子code
for (var i = 0; i < 10; i++) { console.log(123); }
這裏咱們在for循環裏隨便打印個什麼東西,你會發現最後都是執行了10次。。。
so,到這裏我終於明白了。爲何最上面的結果是10個10了。io
最後要想打印0到9,有不少方法了。例如:console
for (var i = 0; i < 10; i++) { console.log(i); }
這樣直接打印就行了。。。或者把var或者let。。。for循環