for迴圈,定時器,閉包混合一塊的那點事。

2021-07-29 05:26:40 字數 771 閱讀 7404

1,對於乙個基本的for迴圈,順序輸出變數值。

for(var i = 1; i < 4; i++)
2,如果for迴圈中有定時器,如下**。

for (var i = 1; i < 4; i++) , 3000);

}

初衷想要3s後輸出1,2,3。但是3s後,輸出3個4。原因是定時器的非同步執行,for迴圈的執行速度很快,當真正執行到函式體時,此時i早已變成4

,所以結果不想而知。

3,如果要得到正確結果,就要引入閉包來儲存變數i不被銷毀。

for (var i = 1; i < 4; i++) , 3000);

})(i)

}

這樣引入閉包,變數i儲存下來,3s後函式體執行,輸出1,2,3.

也可以這樣寫

for (var i = 1; i < 4; i++) 

function

fn(a)

}

4,如果要實現,沒隔3s輸出乙個數字,即,3s輸出1,3s後再輸出2...,就要對定時器時間設定

for (var i = 1; i < 4; i++) , a*3000); //.....

})(i)

}

實際上,for迴圈很快,上述**類似於同時啟動3個定時器,只需要確保時間不一樣即可。在此,時間分別是3s,6s,9s,由於同時啟動,但是執行時間不同,各個時間間隔都是3s。巧妙地達到了目的。

後續如果有補充,會繼續新增...

for迴圈 js定時器 閉包 自執行函式

for迴圈 js定時器 閉包 自執行函式 前言 面試題目經常會出現這麼一道題目,請將1 10有序每隔一秒輸出。看似這個題目很簡單,但是確難倒了很多js初學者。還有跟這個類似情況,比如給五個dom新增hover事件,理想效果是列印出當前索引,知識都是列印出最後乙個值。錯誤 var len 10 for...

閉包。for迴圈內定時器無效問題解決

閉包就是能夠讀取其他函式內部變數的函式。作用 乙個是可以讀取函式內部的變數,另乙個就是讓這些變數的值始終保持在記憶體中 缺點 閉包會儲存函式中的變數在記憶體中,導致記憶體消耗大 閉包會在父函式外部改變父函式內部變數的值 前端使用非同步執行的情況有 a 定時任務 settimeout setinter...

定時器設定及同伺服器一塊啟動和關閉

第一步,定時器同伺服器一塊啟動,需要用到監聽.web.xml檔案中配置如下 com.sicmed.common.listerner.timingtaskschedule 然後寫對應的監聽類,如下 public class timingtaskschedule implements servletco...