定時(shí)器

定義

js中內(nèi)置的一個(gè)方法,每隔一段時(shí)間或者延遲一段時(shí)間去執(zhí)行一段指定的代碼

分類

  • 重復(fù)執(zhí)行定時(shí)器

setInterval();
作用:每隔一段時(shí)間去重復(fù)執(zhí)行指定的函數(shù)(會(huì)執(zhí)行函數(shù)多次)

  • 延遲執(zhí)行定時(shí)器

setTimeout();
作用:延遲一段時(shí)間去執(zhí)行指定的函數(shù)(只執(zhí)行函數(shù)一次)

語法

  • 有兩個(gè)參數(shù)盾计,兩個(gè)參數(shù)用“ , ”隔開
setInterval(function(),時(shí)間);
setTimeout(function(),時(shí)間);
  • 前面一個(gè)參數(shù)為需要重復(fù)執(zhí)行(延遲執(zhí)行)的代碼
    • 可以直接將代碼寫在函數(shù)內(nèi)
      var box=document.getElementById('box');
      var i=0;
      box.onclick=function(){
            setInterval(function(){
                i++;
                box.innerHTML=i;
            },1000);  
      }; 
    
    • 也可以將函數(shù)在代碼外聲明后進(jìn)行調(diào)用
    var box=document.getElementById('box');
    var i=0;
    box.onclick=function(){
          setInterval(change,1000);
    }; 
    function change(){
        i++;
        box.innerHTML=i;
    };

注意:調(diào)用函數(shù)時(shí)碍庵,直接寫上函數(shù)名字即可入愧,不用加()踩身,若帶上()就為函數(shù)返回值了

  • 后面一個(gè)參數(shù)為重復(fù)執(zhí)行(延遲執(zhí)行)代碼的間隔時(shí)間

    注意:
    1.時(shí)間單位為ms
    2.若未設(shè)置時(shí)間參數(shù)较木,則默認(rèn)為10ms(來自于官方文檔)

調(diào)用

為了便于定時(shí)器的清除侵状,一般是在函數(shù)外聲明一個(gè)變量牺勾,然后調(diào)用時(shí)將定時(shí)器賦值給該變量

var timer;
btn.onclick=function(){
    timer=setInterval();
};

定時(shí)器中的this

  • this的指向

定時(shí)器是window中的一個(gè)方法正罢,可以寫成window.setInterval()或者window.setTimeout(),故定時(shí)器中的this指向的是window

window.onload=function(){
    var box=document.getElementById('box');
    var i=0;
    console.log(this);          //window    這里是由window調(diào)用的函數(shù)驻民,所以這里this為window
    box.onclick=function(){
        console.log(this);      //box       這里是由box點(diǎn)擊以后調(diào)用的函數(shù)翻具,所以這里this為box
        setInterval(function(){
            console.log(this);  //window
            i++;
            box.innerHTML=i;
        },1000);  
    }; 
};
  • 使用上級(jí)函數(shù)中的this

在調(diào)用定時(shí)器的函數(shù)里聲明一個(gè)變量a,然后將該函數(shù)里的this賦值給a回还,定時(shí)器中的函數(shù)如果需要運(yùn)用到調(diào)用它的函數(shù)中的this裆泳,用a來代替

window.onload=function(){
    var box=document.getElementById('box');
    var i=0;
    box.onclick=function(){
        var  a=this;          //聲明變量a
        setInterval(function(){
            i++;
            a.innerHTML=i;    //在定時(shí)器所要觸發(fā)的函數(shù)中使用變量a,由于在自己的作用域里尋找不到柠硕,就會(huì)去它的上級(jí)里尋找a工禾,找到a,那就是找到了上級(jí)函數(shù)的this
        },1000);  
    }; 
};

定時(shí)器返回值(定時(shí)器的編號(hào))

定時(shí)器的返回值是數(shù)字蝗柔,代表是第幾個(gè)定時(shí)器

注意:不同瀏覽器的返回值不同

var n=0;
function add(){
    n++;
};
console.log(setInterval(add,1000));      //在控制欄輸出定時(shí)器的返回值

清除定時(shí)器

  • 原理

利用定時(shí)器的返回值去清除定時(shí)器

注意:
1.不同瀏覽器的定時(shí)器的返回值不同闻葵,存在兼容性問題,故不能直接用返回值去清除癣丧,需要將返回值存在變量里槽畔,然后用變量去清除定時(shí)器
2.定時(shí)器即使清除了,其返回值也不會(huì)清除胁编,之后設(shè)置的定時(shí)器的返回值也會(huì)在其返回值的基礎(chǔ)上繼續(xù)向后排

  • 方法

clearInterval(定時(shí)器的返回值);      //清除重復(fù)執(zhí)行定時(shí)器
clearTimeout(定時(shí)器的返回值);       //清除延遲執(zhí)行定時(shí)器

定時(shí)器的清除方法可以互用
clearInterval()可以用來清除setTimeout()
clearTimeout()可以用來清除setInterval()
只是一個(gè)小拓展竟痰,在清除定時(shí)器的時(shí)候還請(qǐng)一一對(duì)應(yīng)

  • 示例

    • 直接使用返回值(不推薦,存在兼容性問題)
var n=0;
function add(){
    n++;
    console.log(n);
    if(n==8){
        clearInterval(1);        //在chrome中掏呼,這個(gè)定時(shí)器的返回值為1,直接寫入返回值就可以清除铅檩,但不推薦這么做憎夷,因?yàn)榇嬖诩嫒菪詥栴}
    }
};
setInterval(add,1000);
  • 將返回值存在變量中(推薦做法)
var n=0;
function add(){
    n++;
    console.log(n);
    if(n==8){
        clearInterval(Timer);
    }
}
var Timer=setInterval(add,1000);
問題:
這里的定時(shí)器是在聲明的變量里,是如何調(diào)用的昧旨?
這里是將定時(shí)器的返回值賦值給了變量Timer拾给,但是如果需要去獲取返回值,那么函數(shù)就需要被調(diào)用兔沃,所以這里的函數(shù)是被調(diào)用了的
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蒋得,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子乒疏,更是在濱河造成了極大的恐慌额衙,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異窍侧,居然都是意外死亡县踢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門伟件,熙熙樓的掌柜王于貴愁眉苦臉地迎上來硼啤,“玉大人,你說我怎么就攤上這事斧账∏捶担” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵咧织,是天一觀的道長(zhǎng)嗓袱。 經(jīng)常有香客問我,道長(zhǎng)拯爽,這世上最難降的妖魔是什么索抓? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮毯炮,結(jié)果婚禮上逼肯,老公的妹妹穿的比我還像新娘。我一直安慰自己桃煎,他們只是感情好篮幢,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著为迈,像睡著了一般三椿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上葫辐,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天搜锰,我揣著相機(jī)與錄音,去河邊找鬼耿战。 笑死蛋叼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剂陡。 我是一名探鬼主播狈涮,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鸭栖!你這毒婦竟也來了歌馍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤晕鹊,失蹤者是張志新(化名)和其女友劉穎松却,沒想到半個(gè)月后暴浦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡玻褪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年肉渴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片带射。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡同规,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出窟社,到底是詐尸還是另有隱情券勺,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布灿里,位于F島的核電站关炼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏匣吊。R本人自食惡果不足惜儒拂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望色鸳。 院中可真熱鬧社痛,春花似錦、人聲如沸命雀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吏砂。三九已至撵儿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狐血,已是汗流浹背淀歇。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匈织,地道東北人房匆。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像报亩,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子井氢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容