今天用lua写回调的时候用到了闭包,定时器里面写了一个回调函数,用到了外面的局部变量
local tmpIdx = model.curStarIndex
self.waitSecondId[tmpIdx] = self:schedule(
function ()
waitSecond(self,tmpIdx)
end, 2.0)
感觉对闭包概念还是很模糊,就上网查了下相关内容,从下面这个例子,应该能看出一些东西,
function test()
local iVal = 0
function func1()
print(iVal)
end
function func2()
iVal = iVal + 10
end
return func1, func2
end
local a, b = test()
a()
b()
a()
local c,d = test()
c()
d()
c()
b()
a()
结果:
a,b ;a2,b2都有属于自己的局部变量iVal,互不影响,这个很像c++里面的引用传递。而且这个属于他们自己的iVal的值又像static局部变量一样具有记忆功能。当然它不是全局变量,出了test函数就不能访问了。