闭包

2022-02-20 GoLang 小于 1 分钟

闭包就是能够读取其他函数内部变量的函数。

闭包的本质:闭包本质依旧是一个函数,只是这个函数引用着外面的变量/参数。

闭包的特点:

  1. 返回的是一个匿名函数,但是这个匿名函数引用着外面的变量/参数,因此这个匿名函数就和变量/参数形成一个整体,构成闭包。
  2. 闭包中使用的变量/参数会一直保存在内存中,所以会一直使用。意味着闭包不可滥用。
package main

import "fmt"

// 定义一个getSum函数返回值为一个函数,这个函数的参数是一个int类型,返回值也是int类型
func getSum() func(int) int {
	var sum int = 0
	return func(num int) int {
		sum += num
		return sum
	}
}

func main() {
	f := getSum()
	// f(1) 实际调用的是 getSum 返回的函数,此时sum = 0
	fmt.Println(f(1)) // 1
	// f(1) 调用后 sum的值被赋值为1,由于闭包的原因,f(2)调用时,sum = 1 + 2
	fmt.Println(f(2)) // 3
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
上次编辑于: 2023年7月4日 09:36