golang-闭包

1. 闭包

闭包,看这一篇就够了——带你看透闭包的本质,百发百中

1.1 概念

闭包函数:声明在一个函数中的函数,叫做闭包函数。

闭包:内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后

1.2 特点

让外部访问函数内部变量成为可能; 局部变量会常驻在内存中; 可以避免使用全局变量,防止全局变量污染; 会造成内存泄漏(有一块内存空间被长期占用,而不被释放)

1.3 例子

func adder() func(int) int {
  var x int
  return func(y int) int {
  x += y
  return x
  }
}
func main() {
  var f = adder()
  fmt.Println(f(10)) //10
  fmt.Println(f(20)) //30
  fmt.Println(f(30)) //60
  f1 := adder()
  fmt.Println(f1(40)) //40
  fmt.Println(f1(50)) //90
}

变量 f 是一个函数并且它引用了其外部作用域中的 x 变量,此时 f 就是一个闭包。 在 f 的生命周期内,变量 x 也一直有效。

Notice: 定义全局变量的时候,不能用类型推导的方式

1.3 全局变量

全局变量特点:
      1、常驻内存
      2、污染全局

局部变量的特点:
1、不常驻内存
2、不污染全局

闭包:
1、可以让一个变量常驻内存
2、可以让一个变量不污染全局

对内部函数来说,外部函数的变量就是全局变量

posted @ 2021-01-13 00:39  细雨骑驴入剑门  阅读(146)  评论(0编辑  收藏  举报