From wiki 閉包
在計算機科學中,閉包(英語:Closure),又稱詞法閉包(Lexical Closure)或函數閉包(function closures),是引用了自由變量的函數。這個被引用的自由變量將和這個函數一同存在,即使已經離開了創造它的環境也不例外。所以,有另一種說法認為閉包是由函數和與其相關的引用環境組合而成的實體。閉包在運行時可以有多個實例,不同的引用環境和相同的函數組合可以產生不同的實例。
從上面的解釋可以看出,其實閉包就是函數本身加上引用函數外的自由變量組成的實體,而這個自由變量的生命周期和該函數一樣。
package main
import "fmt"
// 斐波列契函數
func Fibonacci() func() int {
a, b := 0, 1
return func() int {
// 引用的外部自由變量 a, b
a, b = b, a+b
return b - a
}
}
func main() {
f := Fibonacci()
for i := 0; i < 10; i++ {
fmt.Printf("% d", f())
}
}
output: 0 1 1 2 3 5 8 13 21 34