- 高阶函数
- 回调函数
- 闭包
高阶函数高阶函数 ( high order function ) 特性:
- 函数可以作为另一个函数的参数(典型用法是回调函数)
- 函数可以返回另一个函数,即让另一个函数作为这个函数的返回值(典型用法是闭包)
- 附带的,函数可以作为一个值赋值给变量
回调函数
| 12
 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
闭包
简单地说,闭包就是”一个函数+一个作用域环境“组成的特殊函数。这个函数可以访问不是它自己内部的变量,也就是这个变量在其它作用域内,且这个变量是未赋值的,而是等待我们去赋值的。
| 12
 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)
参考资料