今天要說的很簡單,沒有setTimeout
的基本用法,也沒有什麼特殊用法。前端
就是想記錄一下setTimeout
的一個特殊狀況,分享給可能也不知道的大家。markdown
setTimeout
的基本寫法你們都不陌生,以下:測試
setTimeout(() => {
// 說,你倒計時想幹什麼
}, millisecond)
複製代碼
其中第二個參數是須要延時執行的毫秒數,你們應該都知道這個時間是不許確的,能夠理解爲最短延時。至於爲何是不許確,事件循環瞭解一下。spa
可是這個最短延時也會騙人,由於它可能會爆炸 😂。調試
今天跟測一個項目,前端須要經過延時的方式去顯示某課程是否開始,未開始展現倒計時界面,倒計時至開始時去掉倒計時界面,拉取主體內容。code
可是測試小姐姐反饋說她的課程沒有開始,沒有顯示倒計時,直接就顯示主內容。而且沒有復現步驟,只此一例。orm
我表示很詫異,可是也沒辦法。因而使出十八般武藝,開始在測試環境打斷點調試,分析代碼邏輯。好半天以後,納尼,邏輯確定是對的,我相信個人判斷。事件
而後我忽然開始懷疑setTimeout
的倒計時時間問題。因而開始查,最後查到了緣由,真的是這貨的鍋,它由於延時時間過長,炸了。產品
這就是今天的重點:setTimeout 的延時毫秒數是有限制的。millisec 參數是 Int32 類型的,最大值爲 2^31 - 1,即 2147483647。一旦超過這個限制,millisec 參數將被視爲 0,代碼會被立馬執行。it
setInterval 也同樣,毫秒數過大會被當作 0,當即執行。
至於解決方案也比較簡單,有如下兩種:
感謝污師葵的評論提問,特此補上解決方案
看完以後,之後若是你也遇到setTimeout
失靈的狀況,記得想起這茬。
若是你喜歡,歡迎掃碼關注個人公衆號,我會按期陪讀,並分享一些其餘的前端知識喲。