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

相关推荐
gladiator+4 小时前
Java中的设计模式------策略设计模式
java·开发语言·设计模式
Lucifer__hell4 小时前
【python+tkinter】图形界面简易计算器的实现
开发语言·python·tkinter
2301_812914874 小时前
py day34 装饰器
开发语言·python
卡提西亚4 小时前
C++笔记-24-文件读写操作
开发语言·c++·笔记
snakecy5 小时前
树莓派学习资料共享
大数据·开发语言·学习·系统架构
Nebula_g5 小时前
C语言应用实例:学生管理系统1(指针、结构体综合应用,动态内存分配)
c语言·开发语言·学习·算法·基础
开心-开心急了5 小时前
关于Flutter与Qt for python 的一些技术、开源、商用等问题
开发语言·python·qt·flutter
友友马5 小时前
『 QT 』按钮类控件属性解析
开发语言·数据库·qt
Evand J5 小时前
【MATLAB例程】基于噪声协方差自适应的互补滤波器方法vs标准互补滤波,用于融合加速度计和陀螺仪数据,估计角度
开发语言·matlab
熊小猿5 小时前
RabbitMQ死信交换机与延迟队列:原理、实现与最佳实践
开发语言·后端·ruby