关闭函数闭包的理解
闭包
几乎所有支持GC的语言都有闭包的概念。
闭包通俗来说,就是:可以捕获并记住外部变量。
关键在于【捕获】外部作用域的变量,并将其【封装】在函数内部,就像函数自带了一个【小背包】,走到哪里都能访问到这些变量。
闭包的体现形式通常是:函数作为返回值,并且这个返回函数里面引用了外部函数的局部变量。
package mainimport "fmt"func outer() func() int {i := 0inner := func() int {// 引用了外部局部变量ii++fmt.Println(i)return i}return inner
}func main() {a := outer()a() // 1a() // 2a() // 3
}
为什么说几乎支持闭包的语言,都是拥有GC的呢?这是因为闭包捕捉了函数的局部变量放在了【小背包】里面,这个变量不会随着函数调用栈返回被销毁,而是随着闭包生命结束而销毁。