闭包
-
概念
一个外层函数中,有内层函数,该内层函数中,会操作外层函数的局部变量(外层函数的参数,或者外层函数中直接定义的局部变量),并且该外层函数的返回值就是这个内层函数。那么这个内层函数和外层函数的局部变量,统称为闭包结构。
-
解释
实质就是将内层函数作为返回值,返回给调用处,那么引用调用处的变量就持有了内层函数的引用,如果这个内层函数含有了外层函数的变量,就是闭包结构
-
局部变量生命周期
- 局部变量的声明周期会发生变化,正常的局部变量随着函数调用而创建,随着函数结束而销毁。但是闭包结构中的外层函数的局部变量并不会随着外层函数的结束而销毁,因为内层函数还要继续使用。
- 外层函数的局部变量是随着外层函数的调用而创建的,所以每调用一次外层函数,外层函数中的局部变量就会创建新的,此时返回调用处的内层函数也会使用新的外层函数局部变量。
-
实例
func increment() func() int { i := 0 return func() int{ i++ return i } }