当前位置: 首页 > news >正文

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

先思考下面这个问题:

local function counter()local count = 0return function()count = count + 1return countend
endlocal a = counter()
local b = counter()print(a()) --> ?
print(a()) --> ?
print(b()) --> ?
print(a()) --> ?

输出结果:

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

http://www.xdnf.cn/news/1141507.html

相关文章:

  • bmp图像操作:bmp图像保存及raw与bmp转换
  • 内容生产的3种方式 最佳实践:人 / 人+机 / 机
  • Win11安装Docker,并使用Docker安装RabbitMQ
  • 14-链路聚合
  • 如何上传github(解决git的时候输入正确的账号密码,但提示认证失败)
  • react/vue vite ts项目中,自动引入路由文件、 import.meta.glob动态引入路由 无需手动引入
  • 7月18日总结
  • Java全栈工程师面试实录:从Spring Boot到AI大模型的深度技术解析
  • 基于K8s ingress灰度发布配置
  • 【Docker#2】容器历史发展 | 虚拟化实现方式
  • Java大厂面试实录:从Spring Boot到AI微服务架构的深度解析
  • [源力觉醒 创作者计划]_文心一言 4.5开源深度解析:性能狂飙 + 中文专精
  • 如何快速下载 MT4 交易平台
  • div和span区别
  • 智象科技赋能金融、证券行业 IT 运维
  • Git使用与管理
  • mac mlx大模型框架的安装和使用
  • BIST会对锁步核做什么?
  • 【PTA数据结构 | C语言版】根据后序和中序遍历输出前序遍历
  • Kubernetes (k8s)、Rancher 和 Podman 的异同点分析
  • Copula 回归与结构方程模型:R 语言构建多变量因果关系网络
  • 异世界历险之数据结构世界(排序(插入,希尔,堆排))
  • mysql 性能优化入门
  • 搜索引擎优化全攻略:提升百度排名优化
  • JAVA 使用Apache POI合并Word文档并保留批注的实现
  • 前端下载文件并按GBK编码解析内容
  • ADVB协议内容分析
  • MyBatis 动态 SQL:让 SQL 语句随条件灵活变化
  • 【科研绘图系列】R语言绘制分组箱线图
  • 【锂电池剩余寿命预测】TCN时间卷积神经网络锂电池剩余寿命预测(Pytorch完整源码和数据)