【Golang系列】-闭包
2022-03-14
闭包
闭包可以理解成:定义在一个函数内部的函数,在本质上,闭包是将函数内部和函数外部连接起来的桥梁。或者说是函数和其引用环境的组合体。
闭包指的是一个函数和与其相关的引用环境组合而成的实体。
简单来说,闭包=函数+引用环境
package main
import "fmt"
//返回一个函数
func add() func(int)int{
var x int
return func(y int) int {
x += y
return x
}
}
func main(){
var f = add()
fmt.Println(f(10))
fmt.Println(f(20))
fmt.Println(f(30))
fmt.Println("==========")
f1 := add()
fmt.Println(f1(40))
fmt.Println(f1(50))
}
结果:
10
30
60
==========
40
90
[Done] exited with code=0 in 0.82 seconds
变量f 是一个函数并且它引用了其外部作用域的x变量,此时f就是一个闭包,在f的声明周期内,变量x也一直有效,闭包进阶:
进阶1
package main
import "fmt"
//返回一个函数
func add(x int) func(int) int {
return func(y int) int {
x += y
return x
}
}
func main() {
var f = add(10)
fmt.Println(f(10))
fmt.Println(f(20))
fmt.Println(f(30))
fmt.Println("==========")
f1 := add(20)
fmt.Println(f1(40))
fmt.Println(f1(50))
}
进阶2:
进阶3: