成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

setTimeout() 和 setInterval()

rickchen / 2352人閱讀

摘要:調(diào)用之后,該方法會(huì)返回一直數(shù)值,表示超時(shí)調(diào)用。這個(gè)超時(shí)調(diào)用是計(jì)劃執(zhí)行代碼的唯一標(biāo)識(shí)符,可以通過(guò)它來(lái)取消超時(shí)調(diào)用。一般認(rèn)為,使用超時(shí)調(diào)用來(lái)模擬間歇調(diào)用的是一種最佳模式。

JavaScript是單線程語(yǔ)言,但它允許通過(guò)設(shè)置超時(shí)值和間歇時(shí)間值來(lái)調(diào)度代碼在特定的時(shí)刻執(zhí)行。前者是在指定的時(shí)間過(guò)后執(zhí)行代碼,而后者是每隔指定的時(shí)間就執(zhí)行一次代碼。

setTimeout 超時(shí)調(diào)用

超時(shí)調(diào)用需要使用window對(duì)象的setTimeout()方法,它接受兩個(gè)參數(shù):要執(zhí)行的代碼和以毫秒表示的時(shí)間(即在執(zhí)行代碼前需要等待多少秒)。第一個(gè)參數(shù)可以是一個(gè)包含JavaScript代碼的字符串,也可以是一個(gè)函數(shù),但是由于傳遞字符串可能導(dǎo)致性能損失,因此不建議以字符串作為第一個(gè)參數(shù)。
下面是重點(diǎn)哦?。。。?/strong>
第二個(gè)參數(shù)是一個(gè)表示等待多長(zhǎng)時(shí)間的毫秒數(shù),但經(jīng)過(guò)該時(shí)間后指定的代碼不一定會(huì)執(zhí)行。JavaScript是一個(gè)單線程的解釋器,因此一定時(shí)間內(nèi)只能執(zhí)行一段代碼。為了控制要執(zhí)行的代碼,就有一個(gè)JavaScript任務(wù)隊(duì)列。這些任務(wù)會(huì)按照將它們添加到隊(duì)列的順序執(zhí)行。setTimeout()的第二個(gè)參數(shù)告訴JavaScript再過(guò)多長(zhǎng)時(shí)間把當(dāng)前任務(wù)添加到隊(duì)列中如果隊(duì)列是空的,那么添加的代碼會(huì)立即執(zhí)行;如果隊(duì)列不是空的,那么它就要等前面的代碼執(zhí)行完了后再執(zhí)行。
調(diào)用setTimeout()之后,該方法會(huì)返回一直數(shù)值ID,表示超時(shí)調(diào)用。這個(gè)超時(shí)調(diào)用ID是計(jì)劃執(zhí)行代碼的唯一標(biāo)識(shí)符,可以通過(guò)它來(lái)取消超時(shí)調(diào)用。要取消尚未執(zhí)行的超時(shí)調(diào)用計(jì)劃,可以調(diào)用clearTimeout()方法并將相應(yīng)的超市調(diào)用ID作為參數(shù)傳遞給它。如:

// 設(shè)置超時(shí)調(diào)用
var timeoutId = setTimeout(function(){
    alert("Hello World!");
},100);
// 取消超時(shí)調(diào)用
clearTimeout(timeoutId);

只要在指定的時(shí)間尚未過(guò)去之前調(diào)用clearTimeout(),就可以完全取消超時(shí)調(diào)用。前面的代碼在設(shè)置超時(shí)調(diào)用后馬上又調(diào)用了clearTimeout(),結(jié)果就跟什么也沒(méi)有發(fā)生一樣。
注:超時(shí)調(diào)用的代碼都是在全局作用域中執(zhí)行的,因此函數(shù)中this的值在非嚴(yán)格模式下指向window對(duì)象,嚴(yán)格模式下是undefined。

setInterval 間歇調(diào)用

間歇調(diào)用與超時(shí)調(diào)用類似,只不過(guò)它會(huì)按照指定的時(shí)間間隔重復(fù)執(zhí)行代碼,直至間歇調(diào)用被取消或者頁(yè)面被卸載。

小結(jié)

在使用超時(shí)調(diào)用時(shí),沒(méi)有必要跟蹤超時(shí)調(diào)用ID,因?yàn)槊看螆?zhí)行代碼之后,如果不再設(shè)置另一次超時(shí)調(diào)用,調(diào)用就會(huì)自行停止。一般認(rèn)為,使用超時(shí)調(diào)用來(lái)模擬間歇調(diào)用的是一種最佳模式。在開(kāi)發(fā)環(huán)境下,很少使用真正的間歇調(diào)用,原因是后一個(gè)間歇調(diào)用可能會(huì)在前一個(gè)間歇調(diào)用結(jié)束前啟動(dòng)。
使用超時(shí)調(diào)用則可以完全避免這一點(diǎn)。如下:

var num = 0;
var max = 10;

function incrementNumber () {
    num++;
    if (num < max) {
        setTimeout(incrementNumber,500);
    } else {
        alert("Done");
    }
}

setTimeout(incrementNumber,500);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80641.html

相關(guān)文章

  • process.nextTick() 、setTimeout()、setInterval() 運(yùn)行機(jī)

    摘要:注意如果主邏輯的代碼執(zhí)行時(shí)間已經(jīng)超過(guò)了第二個(gè)參數(shù)設(shè)置的時(shí)間,那么等運(yùn)行到該回調(diào)函數(shù)時(shí),它會(huì)忽略掉這個(gè)時(shí)間,并立即執(zhí)行。如果某一個(gè)進(jìn)行大量的計(jì)算,那么它就會(huì)阻塞在當(dāng)前的回調(diào)函數(shù)中,等待該計(jì)算完成后,再執(zhí)行下一個(gè)的回調(diào)函數(shù)。 setTimeout() ? JavaScript是一個(gè)單線程的語(yǔ)言,也就是說(shuō)它同一時(shí)間只能執(zhí)行一段代碼,接下來(lái)我們通過(guò)兩個(gè)例子說(shuō)明一下單線程語(yǔ)言和多線程語(yǔ)言的...

    lscho 評(píng)論0 收藏0
  • setTimeoutsetInterval的使用

    摘要:不過(guò)兩者各有各的應(yīng)用場(chǎng)景。方法實(shí)際上,和的語(yǔ)法相同。這意味著如果函數(shù)的主體部分需要秒鐘執(zhí)行完,那么整個(gè)函數(shù)則要每秒鐘才執(zhí)行一次。不過(guò)還是有辦法可以終止和函數(shù)的執(zhí)行。 var intervalProcess = setInterval(alert(GOAL!), 3000); 這個(gè)變量命名可以在實(shí)際代碼中采用 這兩個(gè)方法都可以用來(lái)實(shí)現(xiàn)在一個(gè)固定時(shí)間段之后去執(zhí)行JavaScript。不過(guò)...

    noONE 評(píng)論0 收藏0
  • JS忍者秘籍中的定時(shí)器機(jī)制詳解

    摘要:設(shè)置和清除定時(shí)器直接引用忍者秘籍中的圖片注意定時(shí)器的時(shí)間間隔設(shè)為,也會(huì)有幾毫秒的延遲。以上參考資料忍者秘籍第章馴服線程和定時(shí)器 showImg(https://segmentfault.com/img/remote/1460000015353524?w=1024&h=681); 前言 前段時(shí)間剛看完《JS忍者秘籍》,雖說(shuō)是15年出版的,有些東西是過(guò)時(shí)了,但像對(duì)原型鏈、閉包、正則、定時(shí)器...

    keelii 評(píng)論0 收藏0
  • 定時(shí)器

    摘要:提供定時(shí)執(zhí)行代碼的功能,叫做定時(shí)器,主要由和這兩個(gè)函數(shù)來(lái)完成。它返回一個(gè)整數(shù),表示定時(shí)器的編號(hào),以后可以用來(lái)取消這個(gè)定時(shí)器。上面代碼中,回調(diào)函數(shù)不會(huì)再執(zhí)行了,因?yàn)閮蓚€(gè)定時(shí)器都被取消了。 JavaScript 提供定時(shí)執(zhí)行代碼的功能,叫做定時(shí)器(timer),主要由setTimeout()和setInterval()這兩個(gè)函數(shù)來(lái)完成。它們向任務(wù)隊(duì)列添加定時(shí)任務(wù)。 setTimeout()...

    Nino 評(píng)論0 收藏0
  • setTimeoutsetInterval

    摘要:一個(gè)頁(yè)面在瀏覽器顯示出來(lái)至少需要個(gè)線程,分別是引擎,渲染,事件觸發(fā)。其中事件觸發(fā)是獨(dú)立于其他個(gè)執(zhí)行的,而和是相互排斥的,也就是說(shuō)同一個(gè)時(shí)間二者只有一個(gè)在工作。 作為DOM本身十分重要的2個(gè)異步執(zhí)行函數(shù),初學(xué)者感覺(jué)這個(gè)很不好理解,我簡(jiǎn)單寫(xiě)一寫(xiě)我的理解 setTimeout (func, millisec); setInterval(func, millisec); 這兩個(gè)方法在形式看起來(lái)...

    SnaiLiu 評(píng)論0 收藏0
  • js計(jì)數(shù)器方法setInterval()、clearInterval()、setTimeout()

    摘要:方法描述周期性地調(diào)用一個(gè)函數(shù)或者執(zhí)行一段代碼。方法可取消由方法設(shè)置的。語(yǔ)法詳解是該延時(shí)操作的數(shù)字此隨后可以用來(lái)作為方法的參數(shù)。需要注意的是,不支持第一種語(yǔ)法中向延遲函數(shù)傳遞額外參數(shù)的功能。該值標(biāo)識(shí)要取消的延遲執(zhí)行代碼塊。 方法 描述 setInterval 周期性地調(diào)用一個(gè)函數(shù)(function)或者執(zhí)行一段代碼。 clearInterval 取消掉用setI...

    keithxiaoy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

rickchen

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<