La differenza si verifica se la funzione è ricorsiva. Nel primo caso, il nome della "funzione" non è ancora all'interno del corpo della funzione, quindi qualsiasi chiamata ricorsiva si riferisce effettivamente a qualsiasi versione di "miaFunzione" che era in ambito prima di definire la variabile locale (la maggior parte delle volte questa misura una variabile globale vuota).
fac = "oldvalue"
local fac = function()
print(fac) --prints a string
end
Per essere in grado di scrivere funzioni ricorsive con il modello di assegnazione, una cosa che puoi fare è predichiarare la variabile:
local myFunction
myFunction = function()
-- ...
end
variabili Predeclaring avviene anche per essere l'unico modo per definire una coppia di mutuamente ricorsive funzioni locali:
local even, odd
even = function(n) if n == 0 then return true else return odd(n-1) end end
odd = function(n) if n == 0 then return false else return even(n-1) end end