闭包

定义:一个外层函数中,有内层函数,该内层函数中,会操作外层函数的局部变量(外层函数中的参数,或者外层函数中直接定义的变量),并且该外层函数的返回值就是这个内层函数。这个内层函数和外层函数的局部变量,统称为闭包结构。
 
局部变量的生命周期:
正常的局部变量随着函数调用而创建,随着函数的结束而销毁。但闭包结构中的外层函数的局部变量并不会随外层函数的结束而销毁,因为内部函数还要继续使用。
 
举例示意
铺垫
一个外层函数内部定义一个匿名函数,并将其作为返回值
在调用外层函数时,可以立即执行外层函数返回的匿名函数
 
闭包登场
如果外层函数内定义了一个局部变量i,匿名函数内对变量i引用(i++)
在外部调用外层函数并返回匿名函数时,这个匿名函数被立即执行后,i自增1
在外部二次调用外层函数,匿名函数内的i++的结果没有因上次外层函数调用的结束(i在外层函数中定义)而被销毁,反而i自增的结果被保留
 
代码实现
package main

import "fmt"

func main() {
    c1 := closure() //r1 = fun
    fmt.Printf("%T\n",c1)
    fmt.Println(c1)
    r1 :=c1()
    fmt.Println(r1)
    r2 := c1()
    fmt.Println(r2)
}

func closure()func()int{
    //定义一个局部变量
    i := 0
    //定义一个匿名函数,给变量自增并返回
    fun := func ()int{//内层函数
    i++
    return i
    }
    //返回该匿名函数
    return fun
}

 

posted @ 2020-09-22 20:37  Edward_han  阅读(100)  评论(0)    收藏  举报