,实现斐波那契数列生成器函数的逻辑不变,只是实现不同,闭包返回的是内部函数,留给使用者继续调用而普通函数是直接生成斐波那契数列.
// 1 1 2 3 5 8 13 21 34 55
func TestFibonacci...闭包自带独立的运行环境,每一次运行闭包的环境都是相互独立的,正如面向对象中类和对象实例化的关系那样,闭包是类,闭包的引用是实例化对象.
func autoIncrease() func() int {...,那么闭包内部引用的自由变量就不会被销毁,一直处于活跃状态,从而获得永生的超能力!...祸兮福所倚福兮祸所伏
凡事有利必有弊,闭包不死则引用变量不灭,如果不理解变量长生不老的特性,编写闭包函数时可能一不小心就掉进作用域陷阱了,千万要小心!...[go-functional-programming-closure-wrong.png]
原因仍然是变量长生不老的特性:遍历循环时绑定的变量值肯定是 1,2,3,但是循环变量 i 却没有像普通函数那样消亡而是一直长生不老