面试题答案
一键面试package main
import "fmt"
func counter() func() int {
i := 0
return func() int {
i++
return i
}
}
闭包在这里是一个匿名函数,它捕获并引用了外层函数counter
中的变量i
。每次调用闭包时,它操作的都是同一个i
变量。
闭包捕获的变量i
的生命周期:i
变量是在counter
函数被调用时创建的,由于闭包持有对i
的引用,即使counter
函数返回后,i
也不会被销毁,只有当闭包不再被引用(比如闭包被垃圾回收时),i
才会被销毁。 例如:
func main() {
c := counter()
fmt.Println(c())
fmt.Println(c())
}
上述代码在main
函数中调用counter
函数得到闭包c
,两次调用闭包c
时,i
的值依次递增并返回。