函数的闭包

Go 函数可以是一个闭包。闭包是一个函数值,它引用了其函数体之外的变量。该函数可以访问并赋予其引用的变量的值,换句话说,该函数被这些变量“绑定”在一起。

例如,函数 adder 返回一个闭包。每个闭包都被绑定在其各自的 sum 变量上。

function-closures.go

  1. package main
  2. import "fmt"
  3. func adder() func(int) int {
  4. sum := 0
  5. return func(x int) int {
  6. sum += x
  7. return sum
  8. }
  9. }
  10. func main() {
  11. pos, neg := adder(), adder()
  12. for i := 0; i < 10; i++ {
  13. fmt.Println(
  14. pos(i),
  15. neg(-2*i),
  16. )
  17. }
  18. }