用setTimeout實現(xiàn)setInterval

setTimeout.jpg

今天跟大家分享一道有趣的題目,大家對定時器函數(shù)應(yīng)該都不陌生,但是在開始我們的問題之前,還是簡單介紹下這兩個方法。

一、定義和使用方法

定義:
setTimeout() :在指定的毫秒數(shù)后調(diào)用函數(shù)或計算表達(dá)式,只執(zhí)行一次。
setInterval() :按照指定的周期(以毫秒計)來調(diào)用函數(shù)或計算表達(dá)式。方法會不停地調(diào)用函數(shù),直到 clearInterval() 被調(diào)用或窗口被關(guān)閉。
使用方法:

setTimeout(code,millisec)
setInterval(code,millisec[,"lang"])

其中第一個參數(shù)可以是一個包含javascript代碼的字符串,也可以是一個函數(shù)
第二個參數(shù)是等待時間

e.g.
//不建議傳遞字符串
setTimeout(“alert(‘Hello world’)”, 1000);

//推薦的調(diào)用方式
setTimeout(function(){ 
  Alert(“Hello world!")
},1000)
二、用setTimeout實現(xiàn)setInterval

下面我們就一起來實現(xiàn)這個有趣的問題
思路是使用遞歸函數(shù),不斷地去執(zhí)行setTimeout從而達(dá)到setInterval的效果,看代碼

function mySetInterval(fn, millisec){
  function interval(){
    setTimeout(interval, millisec);
    fn();
  }
  setTimeout(interval, millisec)
}

這個mySetInterval函數(shù)有一個叫做interval的內(nèi)部函數(shù),它通過setTimeout來自動被調(diào)用,在interval中有一個閉包,調(diào)用了回調(diào)函數(shù)并通過setTimeout再次調(diào)用了interval。

三、一個更好的實現(xiàn)

我們再增加一個額外的參數(shù)用來標(biāo)明代碼執(zhí)行的次數(shù)

function mySetInterval(fn, millisec,count){
  function interval(){
    if(typeof count===‘undefined’||count-->0){
      setTimeout(interval, millisec);
      try{
        fn()
      }catch(e){
        count = 0;
        throw e.toString();
      }
    }
  }
  setTimeout(interval, millisec)
}

參考資料:
《Javascript高級程序設(shè)計》
利用setTimeout來實現(xiàn)setInterval

給我點贊的都是小可愛 ^_^

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JavaScript提供定時執(zhí)行代碼的功能,叫做定時器(timer),主要由setTimeout()和setInt...
    晚晴幽草閱讀 1,729評論 1 18
  • 第1章 認(rèn)識JS JavaScript能做什么?1.增強頁面動態(tài)效果(如:下拉菜單、圖片輪播、信息滾動等)2.實現(xiàn)...
    mo默22閱讀 1,526評論 0 5
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,691評論 0 4
  • 定時器 參考鏈接 setTimeout() 上面代碼的輸出結(jié)果就是1,3,2,因為setTimeout指定第二行語...
    Cause_XL閱讀 488評論 0 0
  • 以貌取人,相對還是比較科學(xué)的。 性格寫在唇邊,幸福露在眼角。 理性感性寄于聲線,真誠虛偽映在瞳仁。 站姿看出才華氣...
    張董氏閱讀 436評論 0 0

友情鏈接更多精彩內(nèi)容