- 高阶函数
- 回调函数
- 闭包
高阶函数
高阶函数 ( high order function ) 特性:
- 函数可以作为另一个函数的参数(典型用法是回调函数)
- 函数可以返回另一个函数,即让另一个函数作为这个函数的返回值(典型用法是闭包)
- 附带的,函数可以作为一个值赋值给变量
回调函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package main
import ( "fmt" "strconv" )
func add(msg string, g func(x, y int) int) string{ return msg + " = " + strconv.Itoa(g(1,2)) }
func main () {
f := func (x, y int) int { return x + y }
fmt.Println(add("a+b", f)) }
|
输出:a+b = 3
闭包
简单地说,闭包就是”一个函数+一个作用域环境“组成的特殊函数。这个函数可以访问不是它自己内部的变量,也就是这个变量在其它作用域内,且这个变量是未赋值的,而是等待我们去赋值的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| package main
import "fmt"
func foo(x int) func(int) int { g := func(y int) int { x += y return x } return g }
func main () {
f := foo(5)
fmt.Println(f(10)) fmt.Println(f(10)) fmt.Println(foo(3)(5))
}
|
输出: 15 25 8
- foo(5) 返回了一个函数,赋值给 f
- f 的每次调用都会改变 foo(5) 中 x 的值 (多个闭包函数共享同一个自由变量 x)
参考资料