匿名函数作为返回值时,里层的函数可以使用外层的函数中的变量。
package main
import "fmt"
func squares() func() int {
var x int
fmt.Println("11", x)
return func () int {
fmt.Println("22", x)
x += 2
return x*x
}
}
func main() {
f := squares()
// f = main.squares.func1
fmt.Println(f()) // 4
// 调用main.squares.func1
fmt.Println(f())
}
执行结果:
11 0 // squares()的输出
22 0 // f()的输出
4 // fmt.Println(f()) 的输出
22 2
16
package