16_闭包的一些特性

闭包函数的特性:就相当于引用传递,在闭包函数内改变外部变量,并不释放,而是彻底修改,直到闭包函数不再使用


package main

import "fmt"

//函数的返回值是一个闭包函数,返回函数类型
func Test01() func() int {
	var a int //默认值为0
	return func() int {
		a++
		return a * a
	}
}

//普通函数
func Test02() int {
	var b int
	return b * b
}

func main() {
	var i int = 1
	var name string = "steven"
	func() {
		i = 2
		name = "zhao"
		fmt.Printf("i=%d,name=%s
", i, name) ////i=2,name=zhao

	}() //()调用匿名函数
	//闭包函数的特性,就相当于引用传递,在闭包函数内改变外部变量,并不释放,而是彻底修
	//改,直到闭包函数不再使用
	fmt.Printf("i=%d,name=%s
", i, name) //i=2,name=zhao

	//返回闭包函数测试
	//如果是普通函数调用,则局部变量调用之后就释放了。这是闭包的与众不同之处
	f := Test01()    //接收一下返回的闭包函数
	fmt.Println(f()) //1
	fmt.Println(f()) //4
	fmt.Println(f()) //9
	//普通函数测试
	r := Test02()
	fmt.Println(r) //0
	fmt.Println(r) //0
	fmt.Println(r) //0

}

运行结果:
    

                       

每天的价值就是不停息的前进!!!
原文地址:https://www.cnblogs.com/zhaopp/p/11439389.html