這篇文章主要介紹“怎么用setTimeout模擬setInterval”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么用setTimeout模擬setInterval”文章能幫助大家解決問題。
成都創(chuàng)新互聯(lián)公司于2013年創(chuàng)立,先為平頂山等服務建站,平頂山等地企業(yè),進行企業(yè)商務咨詢服務。為平頂山企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
setInterval(fn,300);
setInterval 執(zhí)行機制,300ms會檢測一次任務隊列中有無未執(zhí)行的上一次任務fn,如果沒有則將fn加入任務隊列,如果有則跳過。由于js單線程,如果在執(zhí)行fn前還要耗時的任務執(zhí)行,則會暴露缺點
1.某些間隔會被跳過
2.可能多個定時器會連續(xù)執(zhí)行
setTimeout(fn,300);
每隔300ms會將fn加入到任務隊列中。
1.利用setTimeout能解決 間隔會被跳過缺點
2.利用遞歸調(diào)用setTimeout 能解決多個定時器連續(xù)執(zhí)行的缺點,確保執(zhí)行fn的間隔時間>=300ms;由于js單線程,只能保證每隔300將fn加入到任務隊列,fn執(zhí)行的時機與任務隊列中的其他任務是否執(zhí)行完畢有關(guān)。
class Poll{ constructor(){ this.clearTime = null; } setInter(fn,time){ this.clearTime = setTimeout(()=>{ fn(); this.setInter(fn,time); },time) } clearInter(){ if(this.clearTime){ clearTimeout(this.clearTime); } } }
關(guān)于“怎么用setTimeout模擬setInterval”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。