func ExFunc(n int) func() {
sum:=n
return func () { //直接在返回处的匿名函数
fmt.Println(sum+1)
}
}
另一个例子:
package main
import "fmt"
func ExFunc(n int) func() {
return func() {
n++ //这里对外部变量加1
(n)
}
}
func main() {
myFunc := ExFunc(10)
myFunc() //这里输出11
myAnotherFunc := ExFunc(20)
myAnotherFunc() //这里输出21
myFunc() //12
myAnotherFunc()//22
//再一次调用myFunc()函数,结果是12,由此得出以下两点
//1.内函数对外函数的变量的修改,是对变量的引用
//2.变量被引用后,它所在的函数结束,这变量也不会马上被销毁,引用变量和产生的函数变量的生命期是一致的
}