前言
什么是闭包?
最近很多人在问我,下面我通过 3 个方面快速的讲清楚闭包这个问题:
- 什么是闭包?
- 闭包用来干什么?
- 闭包带来的影响?
正文
什么是闭包
闭包是函数与其相关环境组合的实体
”
上面这句话读一遍就好了, 简单说:
闭包是在 匿名函数中引用外部函数的局部变量或全局变量
下面通过一个简单的例子来解释一下上面这句话:
闭包的影响
引用局部变量
如果函数 返回的闭包引用了外部的变量
-
同一个函数分别多次调用,每次调用会给内部变量重新分配内存,对外部变量不产生影响
-
对返回的闭包对象多次调用,每次调用不会重新分配内存,对外面变量产生影响
下面通过一个例子解释上面内容:
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
}
闭包用来干什么
闭包最初的目的是 减少全局变量,在函数调用过程中隐式地传递共享变量。 这种方式所带来的的结果就是不够直接,不够清晰,所以 一般不建议使用闭包
最后
如果本文对大家有所帮助的话,请帮我 点个赞👍,感谢支持!
如果本文有任何错误,感谢各位批评指教 !