在 Lua 中,任何函数都是一个闭包。从狭义上讲,闭包是一个匿名函数,就像您示例中的返回函数一样。
闭包是一流的:它们可以分配给变量,传递给函数并从它们返回。它们可以是 Lua 表中的键和值。
与 C++ 或 PHP 不同,Lua 中的闭包可以访问局部范围内的所有变量——上值,无需显式声明上值。当代码执行离开设置它们的块时,上值仍然存在。
现在我们知道闭包是什么以及它为什么有用,让我们举个例子看看它是如何工作的。
考虑下面显示的例子 -
function simpleCounter() local i = 0 return function () -- anonymous function i = i + 1 return i end end c1 = simpleCounter() print(c1()) --> 1 print(c1()) --> 2 c2 = simpleCounter() print(c2()) --> 1 print(c1()) --> 3 print(c2()) --> 2输出结果
1 2 1 3 2