这段时间在看闭包与协程的东西,写点东西来总结一下:
闭包:函数与其相关的引用环境所组合而成的实体。维基百科上对闭包的解释是:闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。变量的作用域仅限于包含它们的函数,因此无法从其它程序代码部分进行访问。不过,变量的生存期是可以很长,在一次函数调用期间所创建所生成的值在下次函数调用时仍然存在。正因为这一特点,闭包可以用来完成信息隐藏,并进而应用于需要状态表达的某些编程范型中。
协程:协程在我看来是能够保存中间执行状态的例程,协程类似于C语言中的函数,但函数是没有中间状态的,而协程可以保留中间执行状态以便进行协程间的切换。
下面是三者的区别:
函数(function):
1、无状态
2、需要独立定义执行体
3、在输入相同的情况下,输出也相同
4、多线程安全
5、要借助外部变量保存状态
闭包(closure):
1、有状态,内部直接保存
2、直接内部定义执行体
3、调用过程中从头到尾执行执行体内全部代码
4、输入相同的情况下,输出不一定相同
5、多线程不一定安全
6、调用简单,不需要传入保存状态的参数
协程(coroutine):
1、有状态,内部直接保存
2、需要独立定义执行体
3、调用直接从上次执行状态继续运行
4、输入相同时,输出不一定相同
5、严禁多线程访问