欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

上一篇:

下一篇: