最近學(xué)習(xí)golang的匿名函數(shù) 發(fā)現(xiàn)閉包還是有點(diǎn)意思
閉包基本概念:閉包是可以包含自由(未綁定到特定對象)變量的代碼塊,這些變量不在這個(gè)代碼塊內(nèi)或者任何全局上下文中定義琼了,而是在定義代碼塊的環(huán)境中定義另假。要執(zhí)行的代碼塊(由于自由變量包含在代碼塊中着绊,所以這些自由變量以及他們引用的對象沒有被釋放)為自由變量提供綁定的計(jì)算環(huán)境(作用域)钞瀑。
代碼示例:
package main
import "fmt"
func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
func main() {
pos, neg := adder(), adder()
for i := 0; i < 10; i++ {
fmt.Println(
pos(i),
neg(-2*i),
)
}
}
運(yùn)算結(jié)果:
0 0
1 -2
3 -6
6 -12
10 -20
15 -30
21 -42
28 -56
36 -72
45 -90
adder函數(shù)返回一個(gè)func(int) int 類型的函數(shù)
pos和neg分別調(diào)用了兩次adder函數(shù)
adder()函數(shù)里面的sum變量屬于閉包內(nèi)的變量熄守,無法被外界所訪問到,保證了sum的安全性
所以我們可以將閉包理解為由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實(shí)體