--闭合函数:一个函数加上该函数所需访问的全部”非局部的变量“。 函数
function count()
local i = 0;
return function()
i = i + 1;
return i;
end spa
end 调试
--这个count函数会返回另一个函数,重点是,这个返回的函数会使用count函数的局部变量。 io
--local i就属于一个非局部变量,由于它既不是全局变量,也不是单纯的局部变量(由于另一个函数能够反问到它)。 function
--因此每次调用闭合函数,非局部变量的值都不会被重置。 变量
------------------------------------------------------------------------------------------------------------------- 语法
--非全局函数: co
local function mutou() background
end return
--介绍一个“语法糖”,上面的mutou函数,
local mutou;
mutou = function ()
end
--这就是咱们函数的真实面貌,函数名称其实也是一个变量名而已。
-------------------------------------------------------------------------------------------------------------------
-- 尾调用:一个函数的调用是另外一个函数的最后一个动做时,这个调用就称之为尾调用。
function mutou()
return count();
end
-- 若是在 return count()+1; 进行加1操做,则这个不属于尾调用。
--尾调用有什么意义:
--进行尾调用时不会耗费多余的栈空间,好比这样一个经典的函数
function foo(n)
if n > 0 then
return foo(n - 1);
else
return "end";
end
end
-- 进行调试:print(foo(999)),会得出结果“end”;这个函数的调用不会引发栈溢出。