先思考下面这个问题:
local function counter()local count = 0return function()count = count + 1return countend
endlocal a = counter()
local b = counter()print(a()) --> ?
print(a()) --> ?
print(b()) --> ?
print(a()) --> ?
输出结果:
print(a()) --> 1
print(a()) --> 2
print(b()) --> 1
print(a()) --> 3
问题1:为什么每一次print(a())的结果都不一致呢?函数体内的count不应该是一个临时变量吗,怎么在调用之前会在上一次调用的结果后进行计算?
分析原因🤔:这是由于闭包引起的,由于return内写的函数里对count有所引用,因此在每次调用完a后,变量count并没有被销毁
问题2:为什么a的值与b的值不会相互影响?
回答🤔:a和b都是由counter()返回的闭包函数实例,它们分别捕获了不同的count
变量副本,因此它们的计数是相互独立的。