Go语言入门学习(三)——闭包

在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。

Go 语言支持匿名函数,可作为闭包。匿名函数是一个”内联”语句或表达式。匿名函数的优越性在于可以直接使用函数内的变量,不必申明。
闭包也是函数内部通过引用的方式调用外部变量的一种方式。

func f(i int) func() int {
    sum := 0
    return func() int {
        sum+=i
        fmt.Println(sum)
        return 0
     }
}

上面的代码中定义了一个f(i int)函数,该函数接收一个参数i,并返回一个函数,返回的函数就是匿名函数,在这个返回的函数中引用了上一个函数中的参数i。
执行结果

a1 := f(5)
a1()
a1()
// 返回
// 5
// 10
  • 在每一次执行的时候,sum都会进行增加,这是内函数对外部函数做出的修改,称为引用。

  • 即便函数执行完毕,这个变量也不会被销毁,也可以称为“内存泄漏”