自由变量的位置不应该是在定义的函数之外吗,怎么画的图跑到函数里面去了

来源:7-1 函数式编程

慕仰8456705

2021-08-10

func outer()func()int{
sum:=0
return func(){sum++}
}
f:=outer()

这里的f才是自由变量吧?

写回答

1回答

ccmouse

2021-08-19

我们一般称sum是自由变量。同学说的是这个图吧:

//img.mukewang.com/szimg/611e62ba09e4b80911600830.jpg

这里是从编译器的角度看。编译器在这个闭包里面看到了sum,它是函数外面定义的,所以是自由变量。那这个sum具体在哪里,就找到了函数外面的这个sum。如果sum是一个结构,里面还有对其他变量或者结构的指针,那其他变量或结构也会被编译器抓到,放在一起形成闭包。

1
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程