Lua中闭包的应用
程序员文章站
2024-03-17 23:50:10
...
什么是闭包
闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。(百度百科)不如直接来例子理解的快
举例
以Lua语言为例
function DoActive()
local Hp = 100
local Mp = 100
function GetHp()
Hp= Hp + 1
return Hp
end
return GetHp()
end
--此时在方法体外去接受DoActive
local A = DoActive()
--此时DoActive会把跟GetHp()相关联的数据形成一个闭包return出来(Hp),而无用的数据(Mp)会被GC掉
--现在A中 有GetHp函数,并且Hp = 101 形成闭包的函数跟数据会在一个空间内储存并挂起,调用时执行
A() -- Hp = 102
A() -- Hp = 103
闭包的概念
上面代码中的GetHp函数,就是一个闭包,百度百科的概念比较抽象,我觉得内部函数被保存到外部时,将会生成闭包。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
闭包的用途
让需要保存的数据一直保存在内存中,而不会因DoActive()方法的调用而清除,不用的数据随GC清除,实现一些属性的私有化(例如例子中的Hp只能由A来调用)
上一篇: (Lua 笔记):Lua函数
下一篇: JS闭包的详解