0%
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| func makeSuffixFunc(suffix string) func(string) string { return func(str string) string { if !strings.HasSuffix(str, suffix) { return str + suffix } return str } }
func adder() func(int) int { var x int = 0 return func(val int) int { x += val return x } }
func main() { f := adder() fmt.Println(f(1)) fmt.Println(f(100)) fmt.Println(f(1000))
f1 := makeSuffixFunc(".jpg") fmt.Println(f1("123")) f2 := makeSuffixFunc(".txt") fmt.Println(f2("hello")) } -----------------------------------print: 1 101 1101 123.jpg hello.txt
|
- 闭包可以读取函数内部的变量,并且会让这个变量始终保存在内存中
使用闭包的注意点
- 由于闭包会使函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则可能会造成性能问题,还可能会导致内存泄漏
- 不要随便修改父函数中的内部变量!!!!!