ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Go从入门到精通——闭包(Closure)——引用了外部变量的匿名函数

2022-05-17 01:01:05  阅读:139  来源: 互联网

标签:闭包 Closure 函数 修改 匿名 引用 str Go


闭包(Closure)——引用了外部变量的匿名函数

  闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使已经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量。因此,简单的说:

  函数+引用环境=闭包

  同一个函数与不同引用环境组合,可以形成不同的实例,如下图:

  一个函数类型就像结构体一样,可以被实例化。

  函数本身不存储任何信息,只有与利用环境结合形成的闭包才具有 “记忆性”。

  函数是编译器静态的概念,而闭包是运行动态的概念。

闭包(Closure)在某些编程语言中也被称为 Lambda 表达式。

在闭包内部修改引用的变量

  闭包对它作用域上部变量的引用可以进行修改,修改引用的变量就会对变量进行实际修改,代码如下:

package main

import ("fmt")


func main(){
//准备一个字符串
str := "Hello world"

//创建一个匿名函数
foo := func(){
     
	fmt.Printf("匿名函数中,修改 引用前 str 的值:%s\n",str)
    //匿名函数中访问 str
    str = "Hello Shanghai\n"
	fmt.Printf("匿名函数中,修改 引用后 str 的值:%s\n",str)
}

fmt.Printf("调用匿名函数前,修改引用前,str 的值:%s\n",str)
//调用匿名函数
foo()
fmt.Printf("调用匿名函数后,修改引用后,str 的值:%s\n",str)
}

  运行后输出如下:

调用匿名函数前,修改引用前,str 的值:Hello world
匿名函数中,修改 引用前 str 的值:Hello world
匿名函数中,修改 引用后 str 的值:Hello Shanghai

调用匿名函数后,修改引用后,str 的值:Hello Shanghai

标签:闭包,Closure,函数,修改,匿名,引用,str,Go
来源: https://www.cnblogs.com/zuoyang/p/16279257.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有