go語言基礎之閉包的特點


       所謂閉包就是一個函數“捕獲”了和它在同一作用域的其它常量和變量。這就意味着當閉包被調用的時候,不管在程序什么地方調用,閉包能夠使用這些常量或者變量。它不關心這些捕獲了的變量和常量是否已經超出了作用域,所以只有閉包還在使用它,這些變量就還會存在。

1、閉包的特點

示例1:  函數調用完畢,x自動釋放

package main //必須

import "fmt"

func test01() int {
	//函數被調用時,x才分配空間,才初始化為0
	var x int //沒有初始化,值為0
	x++
	return x * x  //函數調用完畢,x自動釋放
}

func main() {
	fmt.Println(test01())
	fmt.Println(test01())
	fmt.Println(test01())
	fmt.Println(test01())

}

執行結果:

1
1
1
1

 

2、閉包的特點 (備注:變量不會釋放,還會存在)

//返回值為一個匿名函數,返回一個函數類型,通過f來調用返回的匿名函數,f來調用閉包函數
//它不關心這些捕獲了的變量和常量是否已經超出了作用域
//所以只有閉包還在使用它,這些變量就還會存在。

示例2:

package main //必須

import "fmt"

//函數的返回值是一個匿名函數,返回一個函數類型
func test02() func() int {
	var x int  //沒有初始化,值為0

	return func() int {
		x++
		return x * x
	}
}

func main() {
	//返回值為一個匿名函數,返回一個函數類型,通過f來調用返回的匿名函數,f來調用閉包函數
	//它不關心這些捕獲了的變量和常量是否已經超出了作用域
	//所以只有閉包還在使用它,這些變量就還會存在。
	f := test02()
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
}

執行結果:

1
4
9
16
25

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM