如何理解闭包函数的特性(golang版)

特性:闭包可以在多次调用之间保持原始状态

我们来看一个例子:

go 复制代码
func main() {
    adder := makeAdder(10)
    fmt.Println(adder(5))  // 输出:15,因为 10 + 5 = 15
    fmt.Println(adder(20)) // 输出:30,因为 10 + 20 =30
}
func makeAdder(base int) func(int) int {
    return func(num int) int {
        return base + num
    }
}

在这个例子中,我们可以将函数 func makeAdder(base int) func(int) int 拆成两部分,分别为:

  • func makeAdder(base int)
  • func(int) int

匿名函数 func(int) int 充当了 makeAdder 函数的返回值。

即 makeAdder 函数接收了一个整数作为参数,并返回一个匿名函数。而返回的匿名函数就是闭包函数,因为它引用了 makeAdder 函数作用域中的变量 base,这就是闭包函数的结构定义。

而在闭包函数特性这块,我们可以看到,在闭包函数里,我们首先令变量 base 的值为 10。

  • 第一次操作先对它加 5,得出的值为 15
  • 然后又加 20,得出来的值为 30 而不是 20

这说明每一次调用闭包的时候,它里面的值还是初始值。即闭包可以在多次调用之间保持原始状态

相关推荐
CS创新实验室3 分钟前
《计算机网络》深入学:轮询和令牌传递协议
开发语言·计算机网络·考研·php·408
王干脆16 分钟前
ConcurrentHashMap禁止null键值的原因
java·开发语言
代码游侠27 分钟前
ARM嵌入式开发代码实践——LED灯闪烁(C语言版)
c语言·开发语言·arm开发·笔记·嵌入式硬件·学习
—Qeyser29 分钟前
Flutter Text 文本组件完全指南
开发语言·javascript·flutter
咕噜企业分发小米33 分钟前
豆包大模型在药物研发中的知识检索效率如何?
java·开发语言·数据库
lynnlovemin36 分钟前
SpringBoot+SSE构建AI实时流式对话系统:原理剖析与代码实战
人工智能·spring boot·后端·ai·sse
橘子师兄38 分钟前
C++AI大模型接入SDK—快速上手
开发语言·c++·人工智能
麒qiqi39 分钟前
进阶 IMX6ULL 裸机开发:从 C 语言点灯到 BSP 工程化(附 SDK / 链接脚本实战)
c语言·开发语言
秋刀鱼程序编程1 小时前
Java基础入门(七)---异常处理
java·开发语言·python
遇见你的雩风1 小时前
Java---多线程(一)
java·开发语言