亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

setTimeout還是setInterval?

setTimeout還是setInterval?

setTimeout還是setInterval?據我所知,這兩個javascript的行為方式相同:選項A:function myTimeoutFunction(){     doStuff();     setTimeout(myTimeoutFunction, 1000);}myTimeoutFunction();選項B:function myTimeoutFunction(){     doStuff();}myTimeoutFunction();setInterval(myTimeoutFunction, 1000);使用setTimeout和setInterval有什么區別嗎?
查看完整描述

3 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

有什么區別嗎?


是。調用setTimeout()后,超時執行一定的時間; 間隔在上一個間隔觸發后執行一定的時間。


如果doStuff()函數需要一段時間才能執行,您會注意到區別。例如,如果我們使用setTimeout / setInterval表示調用,.使用*和執行JavaScript代碼觸發超時/間隔[-----],則時間軸如下所示:


Timeout:


.    *  .    *  .    *  .    *  .

     [--]    [--]    [--]    [--]


Interval:


.    *    *    *    *    *    *

     [--] [--] [--] [--] [--] [--]

下一個復雜情況是,如果在JavaScript已經忙于執行某些操作(例如處理上一個間隔)時會觸發間隔。在這種情況下,會記住間隔,并在上一個處理程序完成后立即發生并將控制權返回給瀏覽器。因此,例如doStuff()過程有時很短([ - ]),有時很長([-----]):


.    *    *    ?    *    ?    *    *

     [-]  [-----][-][-----][-][-]  [-]

?表示無法立即執行其代碼的間隔觸發,而是取而代之。


因此,間隔試圖“趕上”以按時恢復。但是,它們并不排在一起:每個區間只能有一個執行掛起。(如果他們都排隊等候,瀏覽器會留下不斷擴展的未完成執行列表?。?/p>


.    *    ?    ?    x    ?    ?    x

     [------][------][------][------]

x表示無法執行或被掛起的間隔觸發,因此被丟棄。


如果你的doStuff()函數通常需要比為它設置的時間間隔更長的時間來執行,那么瀏覽器會吃100%的CPU來嘗試為它提供服務,并且可能會降低響應速度。


你用哪個?為什么?


Chained-Timeout為瀏覽器提供了保證的空閑時間; Interval嘗試確保其運行的功能盡可能接近其預定時間執行,但代價是瀏覽器UI可用性。


我會考慮一次性動畫的間隔,我希望盡可能平滑,而鏈式超時對正在進行的動畫更有禮貌,這些動畫會在頁面加載時一直發生。對于要求較低的用途(例如每30秒觸發一次微不足道的更新程序),您可以安全地使用它們。


在瀏覽器兼容性方面,setTimeout優先于setInterval,但您今天將遇到的所有瀏覽器都支持這兩種瀏覽器。多年來最后一個落后者是WinMo <6.5的IE Mobile,但希望現在也落后于我們。


查看完整回答
反對 回復 2019-05-29
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

的setInterval()

setInterval()是一種基于時間間隔的代碼執行方法,具有在達到間隔時重復運行指定腳本的本機能力。它應該被嵌套到它的回調函數由腳本作者,使其循環,因為它循環默認。除非你打電話,它將繼續按間隔開火clearInterval()。

如果要循環動畫代碼或時鐘滴答,請使用setInterval()

function doStuff() {
    alert("run your code here when time interval is reached");}var myTimer = setInterval(doStuff, 5000);

的setTimeout()

setTimeout()是,將執行一個腳本僅基于時間的代碼執行方法一次到達的時間間隔時。它不會再次重復,除非你通過將setTimeout()對象嵌套在它調用運行的函數內來使其循環腳本。如果適合循環,除非你打電話,它將繼續按間隔射擊clearTimeout()。

function doStuff() {
    alert("run your code here when time interval is reached");}var myTimer = setTimeout(doStuff, 5000);

如果您希望在指定的時間段后發生一次某些事情,請使用setTimeout()。這是因為它只在達到指定的間隔時執行一次。


查看完整回答
反對 回復 2019-05-29
  • 3 回答
  • 0 關注
  • 970 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號