闭包与普通函数**最大的区别是有两个return, 而且都被顺序执行了**,普通函数只能return一次就彻底跳出函数了。比如:
1,func closure1() func() int{
2, i :=0
3, return func() int{
4, i++
5, return i
6, }
7,}
8, f := closure1()
9, fmt.Println(f())
10,fmt.Println(f())
11,fmt.Println(f())
12,fmt.Println(f())
此例中1-7行定义了闭包函数closure1,8-12行为主程序执行过程。我们现在来走一遍主程序,第8行 f 被赋予closure1的引用地址;第9行时执行 f 函数,此时 f 函数为closure1的地址,从第2行开始执行,执行到第3行时return了func的地址,**此时 f 被改为了 func 的地址!**这就是关键之处。 继续进入执行 f 函数,此时的f 函数从第4行开始,执行到第5行,返回i =1,至此第9行执行完毕;第10行时再次执行f 函数,此时的f 函数还是从第4行开始执行,第5行返回 i=2; 以后略同。
有疑问加站长微信联系(非本文作者)