位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > JavaScript > 問(wèn)題詳情

JavaScript 使用閉包

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-11-25

■實(shí)例設(shè)計(jì)

【示例1】使用閉包實(shí)現(xiàn)優(yōu)雅的打包,定義存儲(chǔ)器。

var f = function () {            //外部函數(shù)

    var a =[]                    //私有數(shù)組初始化

    return function(x){          //返回內(nèi)部函數(shù)

        a.push(x);               //添加元素

        return a;                //返回私有數(shù)組

    };

}();                          //直接調(diào)用函數(shù),生成執(zhí)行環(huán)境

var a = f(1);                 //添加值

console.log(a);               //返回1

var b = f(2);                 //添加值

console.log(b);               //返回1,2

    在上面的示例中,通過(guò)外部函數(shù)設(shè)計(jì)一個(gè)閉包,定義一個(gè)永久的存儲(chǔ)器。當(dāng)調(diào)用外部函數(shù),生成執(zhí)行環(huán)境之后,就可以利用返回的匿名函數(shù),不斷向閉包體內(nèi)的數(shù)組a傳入新值,傳入的值會(huì)一直持續(xù)存在。

【示例2】在網(wǎng)頁(yè)中事件處理函數(shù)很容易形成閉包。

<script>

function f () {                    //事件處理函數(shù),閉包

    var a = 1;                     //私有變量a,初始化為1

    b = function(){                //開(kāi)放私有函數(shù)

        console.log( "a = " + a ); //讀取a的值

    }

    c = function () {              //開(kāi)放私有函數(shù)

        a ++ ;                     //遞增a的值

    }

    d = function ( ){              //開(kāi)放私有函數(shù)

        a --;                      //遞減a的值

}

</script>

<button onclick="f ()">生成閉包</button> 

<button onclick="b ()">查看 a 的值</button> 

<button onclick="c ()">遞 增</button> 

<button onclick="d ()">遞 減</button>

    在瀏覽器中瀏覽時(shí),首先單擊“生成閉包”按鈕,生成一個(gè)閉包。單擊第2個(gè)按鈕,可以隨時(shí)查看閉包內(nèi)私有變量a的值。單擊第3、4個(gè)按鈕時(shí),可以動(dòng)態(tài)修改閉包內(nèi)變量a的值。

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部