设为首页 加入收藏

TOP

Go基础系列:函数(2)——回调函数和闭包(二)
2018-10-30 20:09:45 】 浏览:262
Tags:基础 系列 函数
int // 闭包函数g g := func(i int) int { return x + i } x = 5 // 调用闭包函数 fmt.Println(g(5)) x = 10 // 调用闭包函数 fmt.Println(g(3)) }

之所以这里的g也是闭包函数,是因为g中访问了不属于自己的变量x,而这个变量在闭包函数定义时是未绑定值的,也就是自由变量。

闭包的作用很明显,在第一个闭包例子中,f(3)退出后,它返回的闭包函数g()仍然记住了原本属于f()中的x=3。这样就可以让很多闭包函数共享同一个自由变量x的值

例如,下面的a(3)a(5)a(8)都共享来自f()的x=3

a := f(3)
a(3)
a(5)
a(8)

再往外层函数看,f(3)可以将自由变量x绑定为x=3,自然也可以绑定为x=5x=8等等。

所以,什么时候使用闭包?一般来说,可以将过程分成两部分或更多部分都进行工厂化的时候,就适合闭包。第一个部分是可以给自由变量批量绑定不同的值,第二部分是多个闭包函数可以共享第一步绑定后的自由变量

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Go基础系列:defer、panic和recov.. 下一篇some settings for spacemacs gol..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目