JavaScript setInterval()與setTimeout()計(jì)時(shí)器
JavaScript是單線程語(yǔ)言,但是它可以通過(guò)設(shè)置超時(shí)值和間歇時(shí)間值來(lái)指定代碼在特定的時(shí)刻執(zhí)行。超時(shí)值是指在指定時(shí)間之后執(zhí)行代碼,間歇時(shí)間值是指每隔指定的時(shí)間就執(zhí)行一次代碼。
超時(shí)調(diào)用
超時(shí)調(diào)用使用window對(duì)象的setTimeout()方法,它接受兩個(gè)參數(shù):要執(zhí)行的代碼和以毫秒表示的時(shí)間(代碼執(zhí)行前的等待時(shí)間)。其中,第一個(gè)參數(shù)可以是一個(gè)字符串(和eval()中使用的字符串一樣),也可以是一個(gè)函數(shù)。
第二個(gè)參數(shù)是一個(gè)表示等待多長(zhǎng)時(shí)間的毫秒數(shù),但是在該時(shí)間過(guò)去后代碼并不一定執(zhí)行。JavaScript是一個(gè)單線程序的解釋器,因此一定時(shí)間內(nèi)只能執(zhí)行一段代碼。為了控制要執(zhí)行的代碼,就有一個(gè)JavaScript任務(wù)隊(duì)列。這些任務(wù)會(huì)按照將它們添加到任務(wù)隊(duì)列的順序執(zhí)行。setTimeout()的第二個(gè)參數(shù)告訴JavaScript再過(guò)多長(zhǎng)時(shí)間把當(dāng)前任務(wù)添加到隊(duì)列中。如果隊(duì)列是空的,那么添加的代碼則會(huì)立即執(zhí)行;如果隊(duì)列不是空的,那么添加的代碼會(huì)在前面的代碼執(zhí)行完畢后再執(zhí)行。
調(diào)用setTimeout()之后,該方法會(huì)返回一個(gè)數(shù)值ID,表示超時(shí)調(diào)用。這個(gè)超時(shí)調(diào)用ID是計(jì)劃執(zhí)行代碼的唯一標(biāo)識(shí)符,可以通過(guò)它來(lái)取消超時(shí)調(diào)用。取消超時(shí)調(diào)用使用方法clearTimeout();
間歇調(diào)用
間歇調(diào)用與超時(shí)調(diào)用類(lèi)似,只不過(guò)它會(huì)按照指定的時(shí)間間隔重復(fù)執(zhí)行代碼,直至間歇調(diào)用被取消或頁(yè)面被卸載。設(shè)置間歇調(diào)用的方法是setInterval(),它接收的參數(shù)與setTimeout()相同。取消間歇調(diào)用的重要性遠(yuǎn)高于超時(shí)調(diào)用。
但是通常情況下,很少真正使用間歇調(diào)用,因?yàn)楹笠粋€(gè)間歇調(diào)用可能在前一個(gè)間歇調(diào)用結(jié)束之前調(diào)用。因此,我們通常會(huì)使用超時(shí)調(diào)用來(lái)模擬間歇調(diào)用
下面看兩個(gè)小demo:
1、獲得當(dāng)前日期并讓它顯示在文本框內(nèi),點(diǎn)擊“stop”按鈕后事件靜止。(間歇調(diào)用)
HTML代碼:
<input type="text" size="50" id="clock" /> <input type="button" value="Stop" id="btn" />
JavaScript代碼:
function clock(){ var time = new Date(); document.getElementById("clock").value = time; var btn =document.getElementById("btn"); btn.onclick = function(){ clearInterval(t); } } var t = setInterval(clock,1000);
2、使用setTimeou()實(shí)現(xiàn)計(jì)數(shù)統(tǒng)計(jì)效果,并在文本框中顯示數(shù)值。
HTML代碼:
<input type="text" id="count" />
JavaScript代碼:
var num = 0; function startCount(){ document.getElementById("count").value = num; num += 1; setTimeout(startCount,1000); //setTimeout是超時(shí)調(diào)用,使用遞歸模擬間歇調(diào)用 } setTimeout(startCount,1000); //1s后執(zhí)行
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Js中setTimeout()和setInterval() 何時(shí)被調(diào)用執(zhí)行的用法
- JavaScript定時(shí)器setTimeout()和setInterval()詳解
- 精解window.setTimeout()&window.setInterval()使用方式與參數(shù)傳遞問(wèn)題!
- setInterval()和setTimeout()的用法和區(qū)別示例介紹
- setTimeout()與setInterval()方法區(qū)別介紹
- JavaScript中定時(shí)器setTimeout()和setInterval()的用法
- JavaScript中setInterval()和setTimeout()的用法及區(qū)別
相關(guān)文章
js/ajax跨越訪問(wèn)-jsonp的原理和實(shí)例(javascript和jquery實(shí)現(xiàn)代碼)
最近做了一個(gè)項(xiàng)目,需要用子域名調(diào)用主域名下的一個(gè)現(xiàn)有的功能,于是想到了用jsonp來(lái)解決,在我們平常的項(xiàng)目中不乏有這種需求的朋友,于是記錄下來(lái)以便以后查閱同時(shí)也希望能幫到大家,需要了解的朋友可以參考下2012-12-12JavaScript實(shí)現(xiàn)LI列表數(shù)據(jù)綁定的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)LI列表數(shù)據(jù)綁定的方法,可實(shí)現(xiàn)綁定Li列表項(xiàng)對(duì)應(yīng)數(shù)值項(xiàng)的功能,涉及javascript鼠標(biāo)onmousemove、onmouseout及onclick等事件的相關(guān)使用技巧,需要的朋友可以參考下2015-08-08如何使用webpack打包一個(gè)庫(kù)library的方法步驟
這篇文章主要介紹了如何使用webpack打包一個(gè)庫(kù)library的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12js圖片滾動(dòng)效果時(shí)間可隨意設(shè)定當(dāng)鼠標(biāo)移上去時(shí)停止
這篇文章主要介紹了js圖片滾動(dòng)效果時(shí)間可隨意設(shè)定當(dāng)鼠標(biāo)移上去時(shí)停止,需要的朋友可以參考下2014-06-06微信小程序地圖繪制線段并且測(cè)量(實(shí)例代碼)
這篇文章主要介紹了微信小程序地圖繪制線段并且測(cè)量,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01每天一篇javascript學(xué)習(xí)小結(jié)(屬性定義方法)
這篇文章主要介紹了javascript中的屬性定義方法知識(shí)點(diǎn),對(duì)屬性定義方法的基本使用方法,以及各種方法進(jìn)行整理,感興趣的小伙伴們可以參考一下2015-11-11