Lua闭包
--当一个函数内部嵌套另外一个函数定义时,内部的函数体可以访问外部的函数的局部变量,这种特征为词法定界。
--闭包是由函数与其相关的引用环境组合而成的实体 闭包=函数+引用环境
--不是在局部作用范围内定义的一个变量,同时,它又不是一个全局变量 --upvalue 由于有了这样的一种变量存在,所以就有了lua中的闭包
--上面那个变量主要应用在嵌套函数和匿名函数里。
--在lua函数中在定义函数,也就是内嵌函数,内嵌函数可以访问外部函数已经创建的所有“局部变量”,而这些变量就被称为该内嵌函数的upvalue
--upvalue :是内嵌函数可以访问外包函数已经创建的所有局部变量,这些局部变量称为该内嵌函数的外部局部变量(upvalue)
--upvalue实际指的是变量而不是值,这些变量可以在内部函数之间共享
function newMoney() local i =0 return function() --匿名函数 i=i+1 return i end end c1=newMoney() print(c1()) --输出 1 print(c1()) --输出 2 print(c1()) --输出 3 --把闭包当成了一个迭代器 tabl = {1,2,3,4,5,6,8,7,9} function ita(t) local i = 0 return function() i = i+1 return t[i] end end for i in ita(tabl) do --在这里体现把闭包当成了迭代器 print(i) --输出1 2 3 4 5 6 8 7 9 end --关于上述说法的一些例子*********************************************** function Text() local iVal = 10 --upvalue function InnerText1() --内嵌函数 print(iVal) end function InnerText2() --内嵌函数 iVal = iVal+10 end return InnerText1,InnerText2 end --将函数赋值给变量,此时变量a绑定了函数innerFunc1,b 绑定了函数InnerFunc2 local a,b = Text() a() --调用a b() --调用b ,在b函数中修改了upvalue iVal a() -- 调用a ,打印修改后的upvalue -- 输出结果为 10 20