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

相关推荐
java1234_小锋2 分钟前
一周学会Matplotlib3 Python 数据可视化-绘制自相关图
开发语言·python·信息可视化·matplotlib·matplotlib3
甄超锋4 分钟前
Java Maven更换国内源
java·开发语言·spring boot·spring·spring cloud·tomcat·maven
凢en35 分钟前
Perl——qw()函数
开发语言·perl
郝学胜-神的一滴41 分钟前
基于C++的词法分析器:使用正则表达式的实现
开发语言·c++·程序人生·正则表达式·stl
林开落L2 小时前
库的制作与原理
linux·开发语言·动静态库·库的制作
m0_480502643 小时前
Rust 入门 泛型和特征-特征对象 (十四)
开发语言·后端·rust
瓦特what?3 小时前
关于C++的#include的超超超详细讲解
java·开发语言·数据结构·c++·算法·信息可视化·数据挖掘
祁同伟.4 小时前
【C++】动态内存管理
开发语言·c++
一只鲲4 小时前
40 C++ STL模板库9-容器2-vector
开发语言·c++
励志不掉头发的内向程序员4 小时前
C++基础——内存管理
开发语言·c++