最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

setTimeout還是setInterval?

setTimeout還是setInterval?

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

3 回答

?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

有什么區(qū)別嗎?


是。調(diào)用setTimeout()后,超時(shí)執(zhí)行一定的時(shí)間; 間隔在上一個(gè)間隔觸發(fā)后執(zhí)行一定的時(shí)間。


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


Timeout:


.    *  .    *  .    *  .    *  .

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


Interval:


.    *    *    *    *    *    *

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

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


.    *    *    ?    *    ?    *    *

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

?表示無法立即執(zhí)行其代碼的間隔觸發(fā),而是取而代之。


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


.    *    ?    ?    x    ?    ?    x

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

x表示無法執(zhí)行或被掛起的間隔觸發(fā),因此被丟棄。


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


你用哪個(gè)?為什么?


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


我會(huì)考慮一次性動(dòng)畫的間隔,我希望盡可能平滑,而鏈?zhǔn)匠瑫r(shí)對(duì)正在進(jìn)行的動(dòng)畫更有禮貌,這些動(dòng)畫會(huì)在頁面加載時(shí)一直發(fā)生。對(duì)于要求較低的用途(例如每30秒觸發(fā)一次微不足道的更新程序),您可以安全地使用它們。


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


查看完整回答
反對(duì) 回復(fù) 2019-05-29
?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

的setInterval()

setInterval()是一種基于時(shí)間間隔的代碼執(zhí)行方法,具有在達(dá)到間隔時(shí)重復(fù)運(yùn)行指定腳本的本機(jī)能力。它應(yīng)該被嵌套到它的回調(diào)函數(shù)由腳本作者,使其循環(huán),因?yàn)樗?strong>循環(huán)默認(rèn)。除非你打電話,它將繼續(xù)按間隔開火clearInterval()。

如果要循環(huán)動(dòng)畫代碼或時(shí)鐘滴答,請(qǐng)使用setInterval()

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

的setTimeout()

setTimeout()是,將執(zhí)行一個(gè)腳本僅基于時(shí)間的代碼執(zhí)行方法一次到達(dá)的時(shí)間間隔時(shí)。它不會(huì)再次重復(fù),除非你通過將setTimeout()對(duì)象嵌套在它調(diào)用運(yùn)行的函數(shù)內(nèi)來使其循環(huán)腳本。如果適合循環(huán),除非你打電話,它將繼續(xù)按間隔射擊clearTimeout()

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

如果您希望在指定的時(shí)間段后發(fā)生一次某些事情,請(qǐng)使用setTimeout()。這是因?yàn)樗辉谶_(dá)到指定的間隔時(shí)執(zhí)行一次。


查看完整回答
反對(duì) 回復(fù) 2019-05-29
  • 3 回答
  • 0 關(guān)注
  • 990 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)