Go语言函数中的闭包学习

   Go函数是可以闭包的。闭包是一个函数值,他来自函数体外部的变量引用

  1. 闭包:外部函数定义的内部函数就是闭包。
  2. 闭包的作用及好处:闭包给访问外部函数定义的内部变量创造了条件。也将关于函数的一切封闭到了函数内部,减少了全局变量,这也是闭包的真实含义。

小demo:  Go语言函数中的闭包学习

上边小demo是Go文档中的闭包写法  

pos,neg两个变量分别调用了adder()函数 并将0-10的数作为参数传递 按照平常的思维的结果为:

Go语言函数中的闭包学习

  adder()函数中的sum的值为0+i 可是打印出的结果为

 Go语言函数中的闭包学习

 结果跟想象中的不同 sum+i的值 i没有变 sum的值一定是改变的了 

实际上,在pos, neg := adder(), adder()的时候,pos和neg引用不仅得到了上面的那个闭包,也得到了sum这个在引用中的”闭包变量”,所以实际上每次调用pos(i)和neg(-2 * i),都是改变了sum的值并存在pos引用对应的函数中了,sum的值为上次调用函数的最终结果  

总结: 闭包函数时定义的局部变量是无关操作的 

sum的生命周期是跟接收adder()的变量posneg的声明周期是一致的

:::仅做自我理解