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

相关文章
相关标签/搜索