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

相关推荐
LDR0064 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术4 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园4 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob4 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享4 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.4 天前
C语言--day30
c语言·开发语言
何以解忧,唯有..4 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽4 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下4 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
飞天狗1114 天前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言