当前位置: 首页 > 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.lryc.cn/news/592515.html

相关文章:

  • python-pptx 的layout 布局
  • 人工智能概念之九:深度学习概述
  • JavaSE -- 对象序列化和反序列化详细讲解
  • MySQL的关键日志
  • QML vscode语法高亮和颜色区分。
  • 根据用户id自动切换表查询
  • 7月18日总结
  • UNet改进(23):如何用SLCAM模块提升UNet的分割性能
  • Linux C 进程间通信基本操作
  • 对Yii2中开启`authenticator`后出现的跨域问题-修复
  • 高通8255 Android Virtio Virtio-SPI 配置方法
  • 当OT遇见IT:Apache IoTDB如何用“时序空间一体化“技术破解工业物联网数据孤岛困局?
  • RSTP技术
  • 图书系统(新)
  • 文件上传 ,显示文件列
  • [3-02-01].第01章:框架概述 - Spring生态
  • QT窗口(4)-浮动窗口
  • 如何阅读Spring源码
  • JavaSE -- 数据操作流
  • 亚马逊广告高级玩法:如何通过ASIN广告打击竞品流量?
  • 利用steps()分步实现奔跑的小熊案例
  • IDEA 中 Maven 配置:当前项目与新项目的统一设置方法
  • 基于单片机金沙河粮仓环境监测系统设计与实现
  • STM32之L298N电机驱动模块
  • Maven 配置文件核心配置:本地仓库、镜像与 JDK 版本
  • JVM常用运行时参数说明
  • sizeof和strlen的区别
  • 【AI News | 20250717】每日AI进展
  • 通信算法之294:LTE系统中的整数倍频偏估计
  • 【数据结构初阶】--双向链表(一)