package main
import (
"fmt"
"strings"
)
// 闭包,将匿名函数作为返回值,或者将一个匿名函数赋值给一个变量,同时在匿名函数中可以访问外部变量
// 同时通过闭包引用的外部变量也会随之改变。
func makeSuffix() func(string) string {
var suffix string
return func(s string) string {
if strings.HasSuffix(suffix, s) == false {
suffix = suffix + s
return suffix
}
return suffix
}
}
func main() {
f1 := makeSuffix()
s := f1("qwe")
s1 := f1("asd")
fmt.Println(s, s1)
n := 0
f2 := func() int {
n++
return n
}
fmt.Println(f2())
fmt.Println(f2())
fmt.Println(n)
}
闭包个人感觉就是一个匿名函数通过调用了外部变量,对它有了一个更改的效果,并且这种更改会随着闭包的存在,持续下去,直到闭包销毁。