golang:匿名函数作为返回值

匿名函数作为返回值时,里层的函数可以使用外层的函数中的变量。

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变量的值?

你可能感兴趣的:(golang:匿名函数作为返回值)