golang:函数闭包

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

你可能感兴趣的:(golang:函数闭包)