CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
Lua基础内存作用域

堆栈与作用域:局部变量为什么要多用

2026-10-19 22:25 作者:996 技术组 Lua基础内存作用域

写代码少打 local 很爽,内存会哭。这节把栈/堆和作用域一次讲清。

一、栈和堆

栈堆
特点小、快大、慢
放什么局部变量、函数参数、临时值表、字符串等引用对象
生命周期作用域结束就扔手动/GC 决定

联想:栈 = 瞬间记忆,堆 = 手机相册。6 位数你脑子里记一下是栈;写进文本是堆。

二、do...end 作用域(灯)

lua
local n = 100
do
    local n = 200
    print(n)   --> 200
end
print(n)       --> 100

do end 像一间屋子;local 是屋里的灯,出屋灯灭。外面的 n 不受影响。

三、能 local 就 local

lua
-- 不好:全局进堆,永不自动消失,还容易撞名
A = 1
B = 2

-- 好:栈上分配,出作用域即释放
local A = 1
local B = 2

养成习惯:函数体、循环、触发里,新变量一律 local。

四、模块私有化

lua
-- 模块.lua
local T = {}
local secret = 0          -- 外面摸不到
function T.add(x) secret = secret + x end
function T.get() return secret end
return T

secret 是模块私有;只暴露 add/get。这是封装的核心。

五、命名冲突实验

lua
-- 模块 A
local T = { hi = function() print("A") end }
return T

-- 别人写了
T = { hi = function() print("B") end }

若模块用全局 T,后写的会覆盖先写的。用 local T + return 就安全。

六、实战口诀

  1. 函数参数、临时变量:local
  1. 跨文件共享:模块 return table
  1. 数组遍历 ipairs,字典 pairs
  1. 别迷信说明书,多 print(type(...)) 自己验

今日练习:用 do...end 演示局部灯;写模块含私有计数器,只通过函数改值。


作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →