閉包、定時(shí)器、計(jì)時(shí)器

閉包

在外部函數(shù)中定義一個(gè)內(nèi)部函數(shù)
這個(gè)內(nèi)部函數(shù)會(huì)操作外部函數(shù)中聲明的變量
并且將這個(gè)內(nèi)部函數(shù)在外部函數(shù)的外面去調(diào)用或使用
所形成的閉合回路叫閉包
特點(diǎn)/原理
強(qiáng)行延長(zhǎng)了函數(shù)內(nèi)局部變量的聲明周期,讓這個(gè)變量不會(huì)被徹底銷毀

var btn = document.getElementById("btn");
    function fn1() {
        var a = 0;
        btn.onclick = function() {
            a++;
            console.log(a);
        }
    }
    fn1();

定時(shí)器

setTimeout
規(guī)定 若干秒之后 執(zhí)行一次且執(zhí)行一次
計(jì)時(shí)器,每隔若干秒執(zhí)行一次,如果不清楚就一直執(zhí)行下去
定時(shí)器,若干秒之后執(zhí)行一次,且只執(zhí)行一次

setTimeout(function(){
        console.log(1);
    },1000);

計(jì)時(shí)器

seInterval
計(jì)時(shí)器是一個(gè)方法,這個(gè)方法中有兩個(gè)參數(shù)
第一個(gè)參數(shù),是執(zhí)行的是需要執(zhí)行的代碼片段
第二個(gè)參數(shù),是執(zhí)行的時(shí)間間隔,單位是ms毫秒

var a = 0;
setInterval(function () {
    setInterval(function () {
        a++;
        }, 1000)
        a++;
    console.log(a);
}, 1000);

注意!!!!!!!! setInterval 可以嵌套 setInterval
但是!!!!!!!! 千萬(wàn)千萬(wàn)不要嵌套!!!

setInterval有返回值,他的返回值是他的id
setInterval的id是數(shù)字
通常從1開(kāi)始按順序遞增
順序是setInterval創(chuàng)建的順序
除了火狐瀏覽器之外,其他的setInterval的id都是從1開(kāi)始
火狐瀏覽器是從2開(kāi)始

function randNum(min, max) {
        return Math.round(Math.random() * (max - min) + min);
    }
var ooo = document.getElementById('ooo')
var num = 0;
var arr = [11, 22, 33, 44, 55]
var arr1 = ["1", "2", "3", "4", "5", "6", "7", "8", "8", "9", "10", "11", "12", "13", "14", "15", "16"];
/*var d = setInterval(function () {
        num = randNum(0, 16);
        // console.log(arr[num]);
        ooo.innerHTML = (arr1[num]);
        a = randNum(0, 255);
        b = randNum(0, 255);
        c = randNum(0, 255);
        ooo.style.backgroundColor = `rgb(${a},$,${c})`
    }, 120)
    console.log(d);*/
var num = 0;
    ooo.onclick = function () {99
        if (num % 2 == 0) {
            clearInterval(d);
        } else {
            d = setInterval(function () {
                numb = randNum(0, 16);
                // console.log(arr[num]);
                ooo.innerHTML = (arr1[numb]);
                a = randNum(0, 255);
                b = randNum(0, 255);
                c = randNum(0, 255);
                ooo.style.backgroundColor = `rgb(${a},$,${c})`
            }, 100)
        }
        num++;
    }

清除計(jì)時(shí)器

clearInterval
清除計(jì)時(shí)器 是根據(jù) 在這個(gè)計(jì)時(shí)器的 id 來(lái)清除的

var num = 0;
    ooo.onclick = function () {99
        if (num % 2 == 0) {
            clearInterval(d);
        } else {
            d = setInterval(function () {
                numb = randNum(0, 16);
                // console.log(arr[num]);
                ooo.innerHTML = (arr1[numb]);
                a = randNum(0, 255);
                b = randNum(0, 255);
                c = randNum(0, 255);
                ooo.style.backgroundColor = `rgb(${a},$,${c})`
            }, 100)
        }
        num++;
    }

開(kāi)關(guān)

var num = 1;
    ooo.onclick = function () {
        if (num) {
            clearInterval(d);
            num = 0;
         } else {
           d = setInterval(function () {
                 num = randNum(0, 16);
                // console.log(arr[num]);
                 ooo.innerHTML = (arr1[num]);
                a = randNum(0, 255);
                 b = randNum(0, 255);
                c = randNum(0, 255);
                 ooo.style.backgroundColor = `rgb(${a},$,${c})`
             }, 120)
            num = 1;
         }
    }

封裝清除所有定時(shí)器的方法

function clearAll(){
        var last = setInterval(function () {}, 1000);
        for(var i = 1;i <= last;i++){
            clearInterval(i)
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容