GO-三个方面理解闭包

3,099 阅读2分钟

前言

什么是闭包?

最近很多人在问我,下面我通过 3 个方面快速的讲清楚闭包这个问题:

  1. 什么是闭包?
  2. 闭包用来干什么?
  3. 闭包带来的影响?

正文

什么是闭包

闭包是函数与其相关环境组合的实体

上面这句话读一遍就好了, 简单说:

闭包是在 匿名函数中引用外部函数的局部变量或全局变量

下面通过一个简单的例子来解释一下上面这句话:

闭包的影响

引用局部变量

如果函数 返回的闭包引用了外部的变量

  1. 同一个函数分别多次调用,每次调用会给内部变量重新分配内存,对外部变量不产生影响

  2. 对返回的闭包对象多次调用,每次调用不会重新分配内存,对外面变量产生影响

下面通过一个例子解释上面内容:

package main

import ( "fmt" )
func colsure() func() { age := 1
return func () { age++ fmt.Println("age: ", age) } }
func main() { f := colsure() g := colsure()
// 同一个函数分别多次调用 f() // age: 2 g() // age: 2
// 对返回的闭包对象多次调用 g() // age: 3 g() // age" 4 }

使用全局变量

每一次调用都对外面的全局变量有影响

package main

import ( "fmt" )
var age = 1 func colsure() func() { return func () { age++ fmt.Println("age: ", age) } }
func main() { f := colsure() g := colsure()
f() // age: 2 g() // age: 3 }

闭包用来干什么

闭包最初的目的是 减少全局变量,在函数调用过程中隐式地传递共享变量。 这种方式所带来的的结果就是不够直接,不够清晰,所以 一般不建议使用闭包

闭包思维导图

最后

如果本文对大家有所帮助的话,请帮我 点个赞👍,感谢支持!

如果本文有任何错误,感谢各位批评指教 !