經典的for循環案例

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循環

相關文章
相關標籤/搜索