對閉包的一些新理解

閉包demo

package main

import "fmt"

func AddOne() func (int) int {
	var n int = 10
	return func (x int) int {
		n = n + x
		return n
	}
}

func main() {
	f := AddOne()
	fmt.Println(f(1))
	fmt.Println(f(2))
	fmt.Println(f(3))
}

輸出:

$ go run main.go
11
13
16

基本理解

閉包部分爲

    var n int = 10
	return func (x int) int {
		n = n + x
		return n
	}

返回的函數和變量n構成了閉包

由於返回的函數依賴變量n,因此形成了一個整體。此外,該返回的函數被變量f引用了,一直沒被釋放,因此n也一直存在。

換一種思路理解

閉包就相當於用函數式編程實現面向對象編程中的類。


簡單來說,可以將閉包理解成一個類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章