闭包函数原理探索

--[[
 file name : lua_closure.lua
 author  :  Clark/陈泽丹
 created :  5:8:2011
 purpose :  闭包函数原理探索
--]]

 

function funCount() --闭包函数原理探讨
 local n = 0
 local function countDown()
  n = n + 1
  return n
 end


 --[[
 return countDown
 “闭包函数”:返回的是“新生成的内部函数地址”!
 由于函数本身做为变量存在了,从而其用到的相关的外部的变量(“陪嫁变量”)也变成静态变量存在了,但新函数地址内部的变量则仍为临时变量。
 --]]

 --[[
 --return countDown()
 “内嵌函数”: 返回的是“内部函数”!
 他其实真正返回的是“函数内部的变量”,而不是“函数本身”。由于函数本身不能做为变量存在, 所以其相关的外部的变量(“陪嫁变量”)也就不能做为静态变量存在了。
 --]]

 --[[
  结论: 成不成为闭包函数,关键看返回值是什么。
  另外, “陪嫁变量”的学名是:Upvalue
 --]]

 return countDown --返回的是“新生成的内部函数地址”! 提供“陪嫁机制”。
end

a = funCount()
b = funCount()
for i=1, 3 do
 print("a的值:" , a,  "b的值:" , b,  "funCount()的返回值:", funCount())
 print("a()的值:", a(), "b()的值:", b(), "funCount()()的值:", funCount()())
end

你可能感兴趣的:(闭包函数原理探索)