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

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

相关推荐
LMT流氓兔13 小时前
第五单元——第十六课:给书店助手加上网页界面
java·开发语言·jvm·人工智能·oracle·langchain·1024程序员节
专注仿真13 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
外收内放13 小时前
Python基础语法练习题(75)
开发语言·python·学习
IT_陈寒13 小时前
JavaScript的this坑人实录,这次我真的记下来了
前端·人工智能·后端
starzy199014 小时前
Scala循环与判断:一切皆表达式的控制流
开发语言·人工智能·scala
starzy199014 小时前
Scala类和对象:从构造器到样例类的完整指南
开发语言·后端·scala
梦影_14 小时前
MySQL进阶教程(五)—— SQL调优(下)
android·大数据·数据库·后端·sql·mysql·database
考虑考虑14 小时前
mariadb数据库
数据库·后端·mariadb
niucloud-admin14 小时前
NIUCLOUD PHP SAAS上门家政使用文档--服务订单:订单列表
开发语言·php
明月_清风15 小时前
用自然语言操控真机:Google Artemis 移动端 AI Agent 上手与实践
人工智能·后端