【Lua】闭包可能会导致的变量问题

先思考下面这个问题:

lua 复制代码
local function counter()
  local count = 0
  return function()
    count = count + 1
    return count
  end
end

local a = counter()
local b = counter()

print(a()) --> ?
print(a()) --> ?
print(b()) --> ?
print(a()) --> ?
 

输出结果:

lua 复制代码
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 变量副本,因此它们的计数是相互独立的。

相关推荐
疾跑哥布林升级版29 分钟前
网络编程7.17
开发语言·网络
青岛少儿编程-王老师30 分钟前
CCF编程能力等级认证GESP—C++1级—20250628
java·开发语言·c++
knightkkzboy1 小时前
《C语言中的`qsort`函数:使用与实现》
c语言·开发语言·qsort
LittleLoveBoy2 小时前
Java HashMap key为Integer时,遍历是有序还是无序?
java·开发语言
Mr_Xuhhh2 小时前
QT窗口(4)-浮动窗口
android·开发语言·网络·数据库·c++·qt
冲!!2 小时前
前端获取当前日期并格式化(JS)
开发语言·前端·javascript
没有羊的王K2 小时前
SSM框架——Day4
java·开发语言
24kHT2 小时前
2.3 前端-ts的接口以及自定义类型
java·开发语言·前端
我命由我123452 小时前
VSCode - VSCode 快速跳转标签页
开发语言·前端·ide·vscode·编辑器·html·js
Mr_Xuhhh2 小时前
QT窗口(3)-状态栏
java·c语言·开发语言·数据库·c++·qt·算法