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的表現一樣的啊,僅僅是三行倒也好理解,似乎也沒複雜多少,但是現成的簡單一點的東西為什麼不直接拿來用呢?