首頁技術(shù)文章正文

什么是閉包函數(shù)?如何實(shí)現(xiàn)?

更新時間:2021-10-08 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

什么是閉包函數(shù)?

在JavaSeript中,內(nèi)嵌函數(shù)可以訪問定義在外層函數(shù)中的所有變量和函數(shù),并包括其外層函數(shù)能訪問的所有變量和函數(shù)。但是在函數(shù)外部則不能訪問函數(shù)的內(nèi)部變量和嵌套函數(shù)。

此時就可以使用“閉包”來實(shí)現(xiàn)。

所謂“閉包”指的就是有權(quán)訪問另一個函數(shù)作用域內(nèi)變量(局部變量)的函數(shù)。 它最主要的用途是以下兩點(diǎn)。

1.可以在函數(shù)外部讀取函數(shù)內(nèi)部的變量。

2.可以讓變量的值始終保持在內(nèi)存中。

需要注意的是,由于閉包會使得函數(shù)中的變量一直被保存在內(nèi)存中,內(nèi)存消耗很大,所以濫用閉包可能會降低程序的處理速度,造成內(nèi)存消耗等問題。

閉包函數(shù)的實(shí)現(xiàn)

常見的閉包創(chuàng)建方式就是在一個函數(shù)內(nèi)部創(chuàng)建另一個函數(shù),通過另一個函數(shù)訪問這個函數(shù)的局部變量。為了讓大家更加清楚閉包函數(shù)的實(shí)現(xiàn),下面我們通過代碼進(jìn)行演示。

function fn() {
    var times = 0;
    var c = function() {
        return ++times;
    };
    return c;
}
var count = fn();   //保存fn()返回的函數(shù),此時count就是一個閉包
//訪問測試
console.log(count());	//輸出結(jié)果: 1
console.log(count());	//輸出結(jié)果: 2
console.log(count());	//輸出結(jié)果: 3
console.log(count());	//輸出結(jié)果: 4
console.log(count());	//輸出結(jié)果: 5

上述第3 ~ 5行代碼,利用閉包函數(shù)實(shí)現(xiàn)了在全局作用域中訪問局部變量times,并讓變量的值始終存儲在內(nèi)存中。第8行代碼調(diào)用fn()函數(shù)后,接下來將匿名函數(shù)的引用返回給count變量,且匿名函數(shù)中使用了局部變量times,因此,局部變量times不會在fn()函數(shù)執(zhí)行完成后被JavaScript回收,依然保存在內(nèi)存中。

1633682066358_閉包.jpg

運(yùn)行效果



猜你喜歡:

JavaScript for循環(huán)語句操作

JavaScript代碼寫在哪里?

javascript開發(fā)工具有哪些?

JavaScript有哪三部分組成?

黑馬程序員HTML&JS+前端高手班

分享到:
在線咨詢 我要報名
和我們在線交談!