# 函数
* * * * *
--: 作者:mick
时间:2019年1月23日
* * * * *
1. 函数分类
2. 什么是回调函数
2. 什么是匿名函数
3. 什么是闭包函数
4. 什么是自由变量
### 函数的分类
1. 普通函数
2. 匿名函数
3. 闭包函数
4. 高阶函数
5. 回调函数
实现上述的其那题是:**支持头等函数(First Class Function)的编程语言,可以把函数赋值给变量,也可以把函数作为其它函数的参数或者返回值。Go 语言支持头等函数的机制**(https://studygolang.com/articles/12789?fr=sidebar)
### 什么是匿名函数:
定义:没有名字的函数就是匿名函数
### 什么是闭包函数:
问题1:普通函数内部可以直接读取全局变量
问题2:什么时候函数可以访问局部变量
```
func Closure()func() int {
var n int
return func()int{
n++
return n
}
}
```
**官方定义:**“官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分
**闭包的特性:**
1. 封闭性:外界无法访问闭包内部的数据,如果在闭包内声明变量,外界是无法访问的,除非闭包主动向外界提供访问接口;
2. 持久性:一般的函数,调用完毕之后,系统自动注销函数,而对于闭包来说,在外部函数被调用之后,闭包结构依然保存在
,系统中,闭包中的数据依然存在,从而实现对数据的持久使用。
### 总结:
1. 闭包是一个有记忆的函数。
2. 闭包相当于一个只有一个方法的紧凑对象(a compact object)