《go语言从入门到进阶实战》
闭包(Closure)在某些编程语言中也被称为Lambda表达式。闭包对环境中变量的引用过程,也可以被称为“捕获”,在C++ 11标准中,捕获有两种类型:引用和复制,可以改变引用的原值叫做“引用捕获”,捕获的过程值被复制到闭包中使用叫做“复制捕获”。在Lua语言中,将被捕获的变量起了一个名字叫做Upvalue,因为捕获过程总是对闭包上方定义过的自由变量进行引用。闭包在各种语言中的实现也是不尽相同的。在Lua语言中,无论闭包还是函数都属于Prototype概念,被捕获的变量以Upvalue的形式引用到闭包中。C++与C#中为闭包创建了一个类,而被捕获的变量在编译时放到类中的成员中,闭包在访问被捕获的变量时,实际上访问的是闭包隐藏类的成员。