所以,什么是闭包?
来源:7-1 函数式编程

matthew21
2021-12-05
有些第一次出现的语法也不解释,这给听课带来很大困难。我对java还算熟悉,听这个课很多地方也是云里雾里的。
package main
import "fmt"
//返回函数
func adder() func(int) int {
sum := 0
return func(i int) int {
sum += i
return sum
}
}
func main() {
// 为啥我需要先把函数赋给一个变量
f := adder()
//为什么我需要循环产能看到效果,直接用f(100)就不行
for i := 0; i < 100; i++ {
//为什么这里f(i),我理解这个函数没有参数,为啥他可以传参
fmt.Println(f(i))
}
}
写回答
3回答
-
慕粉8203926
2021-12-11
为啥我需要先把函数赋给一个变量?
这个变量是函数的返回值,就是func(int) int这个函数。这样可以改变这个函数的外部变量sum。
理解了这个,后面的问题不用回答你就理解了。
这里的闭包就和js的闭包一样,都是用于改变函数作用域外面的变量的。
10 -
文刀走云
2022-04-01
举个现实中的例子,main()就是甲方公司,现在他要找乙方公司f := adder()做sum这个项目,可以提供资料i。
乙方f发现自己不会sum+=i,于是找到外包公司func(int) int,把sum项目转包给它完成。
所以,你应该理解了吧,看似是f完成了sum项目,其实是f转包的func(int)int完成的,f实质是其了一个中介和调度的作用
00 -
尼克2018
2022-01-18
func adder() func(int) int{}
你可以把 func(int) int 这部分看成是函数adder的返回数据。你再去理解f := adder()就好理解了。其实
f就是func(int) int
00
相似问题