什么是闭包

闭包就是一个函数和与其相关的引用环境组合的一个整体(实体)

案例演示

  1. func AddUpper() func(int) int {
  2. var n = 10
  3. return func(x int) int {
  4. n = n + x
  5. return n
  6. }
  7. }
  8. func main() {
  9. f := AddUpper()
  10. fmt.Println(f(1)) //11
  11. fmt.Println(f(2)) //13
  12. fmt.Println(f(3)) //16
  13. }

对上面代码的说明和总结

  • AddUpper 是一个函数,返回的数据类型是 func (int) int
  1. var n = 10
  2. return func(x int) int {
  3. n = n + x
  4. return n
  5. }

返回的是一个匿名函数,但是这个匿名函数引用到函数外的n, 因此这个匿名函数就和n形成一个整体,构成闭包。

  • 闭包是类,函数是操作。n是字段,函数和它使用到n构成闭包
  • 当我们反复的调用f函数时,因为n初始化一次,因此每调用一次就行累计
  • 我们要搞清楚闭包的关键。就是要分析出返回的函数引用到那些变量。因为函数和他引用到的变量共同构成闭包