setTimeout新增第三個引數

2022-02-25 09:32:12 字數 1196 閱讀 7735

**:

2019-01-03

說起來你可能不相信,settimeout居然有第三個引數,我以前也沒用過這個,但最近看到乙個**解決了for迴圈裡面加入了settimeout的例子,下面一起看看這個settimeout第三個引數。

for(var i = 0; i<6; i++),1000);

}

看到上面的這個for例子,相信很多人都能脫口而出,它會連續輸出6次6,因為settimeout是乙個非同步操作,而等到執行settimeout時,for迴圈已經執行完畢,這時的i已經等於6,所以輸出6次的6。那麼怎麼改呢?說說最常見的改法就是使用閉包。
for(var i=0; i<6; i++),j*1000);

})(i);

}

通過閉包,將i的變數駐留在記憶體中,當輸出j時,引用的是外部函式a的變數值i,i的值是根據迴圈來的,執行settimeout時已經確定了裡面的的輸出了。還有一種就是給settimeout新增第三個引數。
for(var i=0;i<6;i++),i*1000,i);

}

由於每次傳入的引數是從for迴圈裡面取到的值,所以會依次輸出0~5。

看了上面的**,相信你對這個settimeout的第三個引數作用大概了解了,是的,它就是給settimeout第乙個函式的引數。

翻一下msdn文件,裡面確實有記錄settimeout第三個及後面的引數的。下面我們來看看這個**

上面第二行列印出了6,1+2+3=6(11是settimeout timeid)。

可以看出,第三個及以後的引數都可以作為sum函式的引數。

var i=0;

settimeout(function(),3000,settimeout(function(),1000));

最後依次輸出為 第一次0 第二次1

可以看到第三個引數還可以是先執行,然後再執行函式。

利用好settimeout的第三個引數,有時候會有意向不到的收穫。希望這篇文章對你有所幫助。

setTimeout的第三個引數

settimeout函式有三個引數 fn 必傳 需要執行的函式 time 非必傳 傳值時 倒計時time毫秒後執行fn 不傳時 預設為0,fn在最早可得的空閒時間執行,在 任務佇列 的尾部執行fn,因此要等到同步任務和 任務佇列 現有的事件都處理完,才會得到執行。param 非必傳 fn函式的引數 ...

addEventListener第三個引數作用

dom方法 addeventlistener 和 removeeventlistener 是用來分配和刪除事件的函式。這兩個方法都需要三個引數,分別為 事件名稱 string 要觸發的事件處理函式 function 指定事件處理函式的時期或階段 boolean dom事件流如圖 當第三個引數設定為t...

第三個Sprint總結

成員 羅凱旋 羅林傑 吳偉鋒 黎文衷 第三階段四則運算專案預期的所有功能功能已經實現,包括自動生成各種難度的算式以及計時功能和小遊戲比賽 看誰一分鐘內算的題目最多等等 團隊github 燃盡圖 結果圖 1.每個成員第二個sprint階段有何需要改進?成員介紹 需要改進 羅凱旋首頁的ui設計有待改進,...