请问如何理解函数闭包,模仿

mefisto · · 1179 次点击
运行下面这段代码你会看到使用静态变量和闭包的一个区别 ```go package main import "fmt" var autoNum int func autoSumStatic() (func ()int){ return func() int{ autoNum++ return autoNum } } func autoSumColsure() (func ()int) { var autoNum int return func() int{ autoNum++ return autoNum } } func main() { f := autoSumStatic() for j := 0; j<10; j++{ fmt.Println(f()) } f = autoSumStatic() for j := 0; j<10; j++{ fmt.Println(f()) } f1 := autoSumColsure() for j := 0; j<10; j++{ fmt.Println(f1()) } f1 = autoSumColsure() for j := 0; j<10; j++{ fmt.Println(f1()) } } ``` 而结果是 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
#3
更多评论
闭包在 JavaScript 中就是函数加上了词法作用域,在这个例子中,是把 ``` func() int{ cur,next=next,cur+next return cur } ``` 和 cur next 结合在一起,作为 ``` f := fibonacci() ``` 的返回值,也就是 f 本身是带着 cur next 这两个变量的。 这样,你循环多次调用的时候, cur next 就不停地更改增加了。
#1
c,c++ 里面的静态变量是保存在数据段的,常驻内存,go 里面的闭包会使用堆来保存变量
#2