闭包函数:
除了访问局部变量和全局变量,函数还可以访问函数声明中声明的所有局部变量,只要它们是在之前声明的(包括在运行时传递给闭包函数的所有参数),在嵌套的情况下,函数可以访问所有函数的变量(无论闭包的级别如何)。
package main
import "fmt"
var global func()
func closure() {
var A int = 1
func() {
var B int = 2
func() {
var C int = 3
global = func() {
fmt.Println(A, B, C)
// fmt.Println(D, E, F) // causes compilation error
}
var D int = 4
}()
var E int = 5
}()
var F int = 6
}
func main() {
closure()
global()
}
注意:即使闭包执行完了,它的局部变量任然不会被销毁。它们仍然能够通过名字是 「global」的函数名去访问。