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

相关推荐
无限进步_1 分钟前
C语言宏的魔法:探索offsetof与位交换的奇妙世界
c语言·开发语言·windows·后端·算法·visual studio
代码雕刻家4 分钟前
C语言关于换行符的注意事项
c语言·开发语言
认真敲代码的小火龙20 分钟前
【JAVA项目】基于JAVA的图书管理系统
java·开发语言·课程设计
爱敲代码的小冰20 分钟前
js 时间的转换
开发语言·前端·javascript
缘三水20 分钟前
【C语言】14.指针(4)
c语言·开发语言·指针·语法
电子_咸鱼26 分钟前
【QT SDK 下载安装步骤详解 + QT Creator 导航栏使用教程】
服务器·开发语言·网络·windows·vscode·qt·visual studio code
AAA阿giao26 分钟前
深入理解 JavaScript 中的面向对象编程(OOP):从构造函数到原型继承
开发语言·前端·javascript·原型·继承·原型模式·原型链
2301_7973122626 分钟前
学习Java22天
java·开发语言
想做后端的前端31 分钟前
Lua基础语法
junit·单元测试·lua
jllllyuz34 分钟前
MATLAB雷达系统设计与仿真
开发语言·matlab