麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

淺談JavaScript超時調用和間歇調用

2019-11-20 11:38:33
字體:
來源:轉載
供稿:網友

間歇調用

在JavaScript中間歇調用很常見,setInterval,就是間隔一定的時間重復調用。

setInterval()方法接收兩個參數(shù):第一個參數(shù)可以是字符串,也可以是函數(shù),第二個參數(shù)是一個以毫秒為單位的數(shù)字,表示重復間隔的時長。

參數(shù)是字符串

當?shù)谝粋€傳遞參數(shù)是字符串時,如下:

setInterval("alert('this is a string.')",1000);

這里的字符串是一段JavaScript代碼,和傳入的eval()函數(shù)的參數(shù)一樣,如果是有內外兩個引號的話,記得引號不要相同就行了。

setInterval()會返回一個數(shù)值型的ID,這個ID是計劃執(zhí)行代碼的唯一標識符,所以可以用它來取消重復操作。setInterval()對應的一個取消該操作的方法:clearInterval(),當然要取消重復操作的話,clearInterval()必須放在還沒有執(zhí)行完畢的時候。

比如:

var intervalId=setInterval(...);clearInterval(intervalId);

首先我們獲取ID,然后將ID傳入clearInterval()中即可,因為取消操作緊跟在setInterval()后面,所以可以立即取消,就和沒發(fā)生一樣。

參數(shù)是函數(shù)

因為當傳遞的參數(shù)是字符串的時候,可能會導致性能損失,所以一般情況下,用的最多的還是給它傳遞一個函數(shù)。

如下:

var num=0;function increNum(){ num++; if(num>=10){  clearInterval(intervalId);  alert('over'); }}intervalId=setInterval(increNum,500);

該段程序設置了一個increNum函數(shù),并作為參數(shù)傳遞給setInterval(),同時當重復運行到10次的時候,取消運行操作,彈出警告框。

超時調用

超時調用和間歇調用類似,setTimeout(),它也接收兩個參數(shù),第一個可以是包含JavaScript代碼的字符串,也可是一個函數(shù),第二個參數(shù)是延時時間和setInterval()方法的參數(shù)是一樣。

但是這里要說明一點:

延時時間并不是說經過設定的延時后程序一定會執(zhí)行。

為什么呢?

因為JavaScript是單線程解釋器,所以在一定的時間內只能執(zhí)行一段代碼,不能同時執(zhí)行多段代碼,所以在JavaScript中有一個任務隊列,將要執(zhí)行的任務按照先后順序排在隊列中,設定的延時時間是經過這段時間將當前任務加入到任務隊列中。如果當前沒有任務執(zhí)行,那么加入到任務隊列中的代碼立刻執(zhí)行,如果當前還有正在執(zhí)行的代碼段,那么只有當該代碼段執(zhí)行完畢后再執(zhí)行新加入的任務。

同樣,setTimeout()也有一個返回ID,也可以通過這個數(shù)值ID來取消超時調用,對應的取消方法是clearTimeout()。

在這里,我們用超時調用方法來把間歇調用中的那段重復執(zhí)行的代碼復寫一遍:

var num=0;function increNum(){ num++; if(num<=10){  setTimeout(increNum,500); }else{  alert('over'); }}setTimeout(increNum,500);

這段程序也可以完成重復操作并在10次之后終止操作,和上述的setInterval()有區(qū)別的是它并沒有用返回的數(shù)值ID。

因為setInterval()是重復執(zhí)行,所以一直會有數(shù)值ID返回,所以必須得一直跟蹤這個數(shù)值ID,而setTimeout()執(zhí)行完畢后就不再執(zhí)行,所以我們不用跟蹤這個返回的數(shù)值ID,這就給我們帶來了一定的便利。

而且,后一個間歇調用可能會在前一個間歇調用還沒結束之前被調用,當函數(shù)的執(zhí)行時間比間歇調用的時間長的時候這種情況就會發(fā)生,所以綜上所述,用setTimeout()來模擬間歇調用是一種比較好的途徑。

當然,在比較簡單的程序中用setInterval()還是沒有很大問題的(突然想起了一句話,存在即是合理的~~~~)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美韩国日本在线 | 久久成人免费网 | 欧美一级精品 | 蜜桃网站在线观看 | 日日摸夜夜骑 | 久久精品2019中文字幕 | 爱福利视频网 | 国产中出视频 | 一级色毛片 | 精品中文字幕在线播放 | 成人免费一区 | 久久精品在这里 | 欧美xxxwww| 久久久裸体视频 | 91精品国产综合久久婷婷香蕉 | 男人的天堂色偷偷 | 92看片淫黄大片欧美看国产片 | 中文字幕在线日韩 | 国产精品麻豆一区二区三区 | 免费看欧美一级特黄a毛片 九色com | 亚洲欧美一区二区三区在线观看 | 精品人伦一区二区三区蜜桃网站 | 黄色男女视频 | 国产一及毛片 | 成年性羞羞视频免费观看无限 | www.91sao | 毛片视| 免费在线观看成年人视频 | 国产视频在线观看免费 | 国内精品视频饥渴少妇在线播放 | 亚洲国产视频在线 | 性欧美性欧美 | 性少妇videosexfreexx| 麻豆国产一区 | 成人毛片100免费观看 | 久精品久久 | 国产在线观看一区二区三区 | 国产免费人做人爱午夜视频 | 久久久久久亚洲国产精品 | 久久国产精品系列 | 黄色羞羞 |