golang:匿名函数作为返回值
程序员文章站
2023-12-21 20:12:52
...
匿名函数作为返回值时,里层的函数可以使用外层的函数中的变量。
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
每次调用函数f会重新声明一个x变量,但会默认从squares函数中获取x的值,赋值给x。func1中x值改变时会改变squares函数中保存的的x变量的值?