更新時間:2021-10-08 來源:黑馬程序員 瀏覽量:
什么是閉包函數?
在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回收,依然保存在內存中。
運行效果
猜你喜歡: