Javascript中的setTimeout和setInterval函數區別

來源:互聯網
上載者:User
從幾年前(有5年多)一直到現在,在很多講解Javascript的資料中看過setTimeout和setInterval這兩個函數,一直就是以為它們倆的功能是完全一樣的--就是多久時間後執行一下了事,所以一直用的就是setTimeout函數,還從來在自己的代碼中沒用過setInterval函數,其實為什麼就不再進一步想想,如果這兩個函數功能完全一樣,為啥有存在的合理性。
到現在我才對兩個函數的一致性表現出慣於懷疑來,到網上Google一下,才恍然大悟。原來是有區別的,首先從其中的兩個單詞來理解也可以看出一點名堂來:
Timeout:<主美>(球類比賽中的)暫時休息,(工作時的)工間休息;電腦裡多為"逾時",或者"時間到了"的意思
Interval:間隔, 距離, 幕間休息,時間間隔
由他們各自代表的 setTimeout 函數表時指定的時間到了,執行某個指定的函數,這時候它的使命即告完成,只執行一次。setInterval 函數則是每隔指定的時間就會執行指定的函數,如果不清除,將執行無數次。setInterval函數的行為更像是很多程式設計語言中的Timer控制項的行為。
清除計數器的函數分別是 clearTimeout 和 clearInterval, 功能說明如下
var timer1 = setTimeout("foo",1000);  //設定foo函數將在1000毫秒後執行一次
.........//do something
clearTimeout(timer1); //如果程式執行到這裡,以setTimeout開始計數時1000毫秒未到,
                                //clearTimeout後,foo將得不到執行
                                //如果1000毫秒已過,foo已被觸發執行,就沒什麼意義了
vartimer2 = setInterval("foo",1000); //設定從現在計時起,每1000毫秒執行1次foo
.........//do something
clearInterval(timer2);  //以後foo將不再觸發執行了
所以這樣一個細節的被忽略了,也就長久以來用setTimeout+遞迴來類比了setInterval的行為,如下代碼
function foo(){
    .......//do something
    setTimeout("foo",1000);
}
上面代碼是不是看起來與setInterval的表現一樣的啊,僅僅是三行倒也好理解,似乎也沒複雜多少,但是現成的簡單一點的東西為什麼不直接拿來用呢?
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.