Golang | 闭包
Contents
闭包概念
闭包字面定义:闭包是由函数
及相关引用环境
组合而形成的实体。(即:闭包=函数+引用环境)
闭包的理解:闭包是个函数,而他记住了周期性发生了什么;表现为在一个函数内部定义另一个函数。so,在本质上,闭包就是将函数内部和外部连接在一起的桥梁。
闭包的作用:
闭包可以读取函数内部的变量
闭包可以让函数内部的变量始终存储在内存中
闭包使用
|
|
函数 foo
返回一个函数签名为:func() int
的一个函数,该函数即为一个闭包。该函数本身没有定义变量 i
, 而是引用了她所在的环境 (函数 foo
) 中的变量 i
|
|
c1 & c2 引用了不同的环境;函数 foo
每进入一次就形成了一个新的环境,对应的闭包中,函数都是同一个函数,环境却是不同的环境。
变量 i
是 foo 函数的局部变量,但其一直存储在内存中。
匿名函数
匿名函数没有函数名,该函数不能独立存在,但可以赋值给某个变量,即保存函数的地址到变量中,然后通过变量调用。
|
|
亦可直接对匿名函数进行调用,调用实例如下:
|
|
格式说明:表示参数列表的的一对括号必须紧跟func
关键字,因为匿名函数没有名称;花括号 {}
内是函数体;最后一对括号表示对该匿名函数的调用
注:
- 匿名函数亦称之为闭包
- 匿名函数像所有函数一样可以接收或不接收参数
- 闭包的另一种表述:一个闭包继承了函数声明时的作用域,作用域内的变量都被共享到了闭包的环境中,因此这些变量在闭包中被操作,直到被销毁。
See Also
Thanks to the authors 🙂