setTimeout()函式延遲迴圈語句的異常簡單介紹

admin發表於2017-03-29

本章節介紹一下使用setTimeout()來延遲迴圈導致異常簡單介紹。

其實不能說異常,準確的說應該原本就是如此,只是比較讓人迷惑而已。

先看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
for(var index=0;index<10;index++){
  setTimeout(function(){
    console.log(index);
  },0);
}

上面的程式碼很多朋友可能第一眼看到的時候,認為會一次輸出0-9,但是事實並非如此,而是輸出的每一個都是10。

之所以這樣是因為使用setTimeout()函式後,會產生非同步操作,當for迴圈執行執行完畢後,index的值已經變為10,所以輸出的每一個值都是10,下面程式碼修改如下:

[JavaScript] 純文字檢視 複製程式碼
for(var index=0;index<10;index++){
  setTimeout((function(index){
    return function(){
      console.log(index);
    }
  })(index),0);
}

上面的程式碼可以按照順序輸出數字,這裡採用閉包的方式實現了我們的要求。

相關文章