--閉合函數:一個函數加上該函數所需訪問的全部」非局部的變量「。 函數
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」;這個函數的調用不會引發棧溢出。