go語言基礎之閉包的特色

   所謂閉包就是一個函數「捕獲」了和它在同一做用域的其它常量和變量。這就意味着當閉包被調用的時候,無論在程序什麼地方調用,閉包可以使用這些常量或者變量。它不關心這些捕獲了的變量和常量是否已經超出了做用域,因此只有閉包還在使用它,這些變量就還會存在。閉包

一、閉包的特色函數

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

package main //必須code

 

import "fmt"ci

 

func test01() int {作用域

    //函數被調用時,x才分配空間,才初始化爲0table

    var x int //沒有初始化,值爲0class

    x++test

    return x * x  //函數調用完畢,x自動釋放import

}

 

func main() {

    fmt.Println(test01())

    fmt.Println(test01())

    fmt.Println(test01())

    fmt.Println(test01())

 

}

執行結果:

1

2

3

4

1

1

1

1

 

二、閉包的特色 (備註:變量不會釋放,還會存在)

//返回值爲一個匿名函數,返回一個函數類型,經過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

2

3

4

5

1

4

9

16

25

相關文章
相關標籤/搜索