From wiki 閉包
在計(jì)算機(jī)科學(xué)中,閉包(英語:Closure),又稱詞法閉包(Lexical Closure)或函數(shù)閉包(function closures),是引用了自由變量的函數(shù)。這個(gè)被引用的自由變量將和這個(gè)函數(shù)一同存在,即使已經(jīng)離開了創(chuàng)造它的環(huán)境也不例外。所以,有另一種說法認(rèn)為閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實(shí)體。閉包在運(yùn)行時(shí)可以有多個(gè)實(shí)例,不同的引用環(huán)境和相同的函數(shù)組合可以產(chǎn)生不同的實(shí)例。
從上面的解釋可以看出,其實(shí)閉包就是函數(shù)本身加上引用函數(shù)外的自由變量組成的實(shí)體,而這個(gè)自由變量的生命周期和該函數(shù)一樣。
package main
import "fmt"
// 斐波列契函數(shù)
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