lua-闭包

在Lua中,闭包(closure)是由一个函数和该函数会访问到的非局部变量(或者是upvalue)组成的,其中非局部变量(non-local variable)是指不是在局部作用范围内定义的一个变量,但同时又不是一个全局变量,主要应用在嵌套函数和匿名函数里,因此若一个闭包没有会访问的非局部变量,那么它就是通常说的函数。也就是说,在Lua中,函数是闭包一种特殊情况。

--函数可以嵌套 内部函数可以访问他外部函数中的变量

--
function func()
local  index = 0
local inner = function()
print("====="..index)
index = index + 1
end

-- 打印 =====0
inner()

-- 打印 =====1
inner()

-- 打印 2
print(index)
end

func()




-- 下面两种都是函数定义
--
func_1 = function()
print("Hello")
end

function func_2()
print("Hello")
end

func_1()
func_2()



-- 函数作为函数的返回值
--
function func3()
return function()
print("Hello")
end
end

--f3即为内部函数
local f3 = func3()
--打印内部函数地址
print(f3)
--即执行内部函数
f3()


-- 被嵌套的函数可以访问他外部函数中的变量
-- func_4()中的局部变量index是可以在inner()中被使用和更改的
-- 函数的局部变量是可以保存在函数内部的,通过调用该函数内嵌的函数可以获取并修改局部变量的值,
-- 该函数的局部变量和内嵌函数的组合使用,形成了闭包
print("==============================")
function func_4()
local index = 0
print("Hello")


return function()
print(index)
index = index + 1
end
end


--先执行func_4() 函数中返回函数赋给inner
local inner = func_4()
print("---")
--打印内部函数地址
print(inner)

inner()
inner()


--先执行func_4() 函数中返回函数赋给other
local other = func_4()
other()

other()


结果:

=====0
=====1
2
Hello
Hello
function: 0027BF98
Hello
==============================
Hello
---
function: 0027C018
0
1
Hello
0
1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ygmdream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值