首頁技術文章正文

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

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

IT培訓班

什么是閉包函數?

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

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

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

1.可以在函數外部讀取函數內部的變量。

2.可以讓變量的值始終保持在內存中。

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

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

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

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

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

1633682066358_閉包.jpg

運行效果



猜你喜歡:

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

JavaScript代碼寫在哪里?

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

JavaScript有哪三部分組成?

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

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