一句話概括的話:閉包就是一個函數,捕獲作用域內的外部綁定。
官方的定義:一個擁有許多變數和綁定了這些變數的環境的表達式(通常是一個函數),因為這些變數也稱為該表達式的一部分。
自由變數和閉包的關係:自由變數閉合於閉包的建立。
內部邏輯就是
自由變數:如果一個函數內部有其他函數,那麼這些內部函數可以存取外部函數中宣告的變數(這些變數就稱為自由變數)。
閉包的三個特性:
#1.函數巢狀函數
2.函數內部可以引用外部的參數和變數
3.參數和變數不會被垃圾回收機制回收
#閉包的缺點是常駐記憶體,會增加記憶體的使用量,使用不當很容易造成記憶體外洩.
閉包的好處:
1.希望一個變數可以長期駐紮在記憶體中
2.避免全域變數的污染
3.私有成員的存在
var a = 10; | |
function f1(){ | |
a++; | |
# console.log(a); | |
} | |
return f1; | |
} | |
var f = fn(); | |
f(); | |
f(); | |
#f(); |
# | |
# | |
# | ## |
#charset=" | UTF-8"> |
標題> | |
# | ## |
## | |
## | #|
# | |
# | |
# | |
# | |
## | # |
## // }# ################// })(我)###############
##