
1.什么是閉包?
2.閉包的作用是什么?
首先我們來簡述一下:什么是閉包?
function foo() {
var a = 2
function bar() {
console.log(a);
}
bar()
}
foo()
在上面的代碼中,函式foo被執行,進而函式bar被定義且執行,
此時的函式bar可以訪問到變數a
這就是一個閉包:
「函式」和「函式內部能訪問到的變數」(也叫環境)的總和,就是一個閉包
那來到第二個問題:閉包的作用是什么?
閉包常常用來「間接訪問一個變數」,或者說,「隱藏一個變數」,
假設在一個支付軟體中,我們需要定義用戶當前的資金總量,這個數字在很多地方都需要被訪問到,如果不用閉包,或許我們能用一個全域函式?
window.money = 4396.00
不,這樣看起來很不妥,萬一有人不懷好意把這個數改成7或者7777777了怎么辦?
所以我們不能讓別人直接訪問這個變數,我們,得用區域變數了,
但是用區域變數別人又訪問不到,怎么辦呢?
我們可以使用閉包,暴露一個函式,實作一個共有變數
代碼如下:
function change() {
var money = 4396.00
function bar() {
console.log(money);
}
return bar
}
var result = change()
result()
result()
result()
延伸
閉包的缺陷
閉包會導致一定程度的記憶體泄漏:
主流瀏覽器中都有一個JS執行引擎,其中有一個回識訓制,回識訓制會定時洗掉不必要的冗雜資料,
但是回識訓制無法回收閉包的函式,及閉包函式中存盤的資料,這就會使得瀏覽器需要更多性能方面的開銷,
閉包的其他作用
1.做快取,能讓多個函式同時作用于一個物件
2.實作封裝,讓屬性能夠私有化
3.在模塊化開發中,能防止污染全域變數
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/279608.html
標籤:其他
