自由变量的位置不应该是在定义的函数之外吗,怎么画的图跑到函数里面去了
来源:7-1 函数式编程

慕仰8456705
2021-08-10
func outer()func()int{
sum:=0
return func(){sum++}
}
f:=outer()
这里的f才是自由变量吧?
写回答
1回答
-
ccmouse
2021-08-19
我们一般称sum是自由变量。同学说的是这个图吧:
这里是从编译器的角度看。编译器在这个闭包里面看到了sum,它是函数外面定义的,所以是自由变量。那这个sum具体在哪里,就找到了函数外面的这个sum。如果sum是一个结构,里面还有对其他变量或者结构的指针,那其他变量或结构也会被编译器抓到,放在一起形成闭包。
10
相似问题