如何理解闭包函数的特性(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

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

相关推荐
希望永不加班几秒前
SpringBoot 定时任务:@Scheduled 基础与动态定时
java·spring boot·后端·spring
我叫黑大帅1 分钟前
如何设计应用层 ACK 来补充 TCP 的不足?
后端·面试·go
张健11564096481 分钟前
QT创建线程
开发语言·qt
鲸渔2 分钟前
【C++ 输入输出】cin、cout、cerr 与格式化输出
开发语言·c++·算法
AIUCE3 分钟前
我给 AI 装了个"秦始皇":11 层架构解决 AI 黑箱问题
后端
3GPP仿真实验室4 分钟前
【MATLAB源码】水声:时变信道估计仿真平台
开发语言·matlab
froginwe114 分钟前
Eclipse 关闭项目详解
开发语言
SimonKing5 分钟前
每天白送4000万Token!这款“龙虾”AI神器,微信就能操控电脑
java·后端·程序员
wjs20247 分钟前
《jQuery Validate》深度解析与应用指南
开发语言
橘子编程10 分钟前
编程语言全指南:从C到Rust
java·c语言·开发语言·c++·python·rust·c#