Sự khác biệt xảy ra nếu hàm này đệ quy. Trong trường hợp đầu tiên, tên "hàm" không nằm trong phạm vi bên trong phần thân hàm nên bất kỳ cuộc gọi đệ quy nào thực sự tham chiếu đến phiên bản "myFunction" nằm trong phạm vi trước khi bạn xác định biến cục bộ của bạn (hầu hết các lần này một biến toàn cầu trống).
fac = "oldvalue"
local fac = function()
print(fac) --prints a string
end
Để có thể viết hàm đệ quy với mô hình chuyển nhượng, có một điều bạn có thể làm là predeclare biến:
local myFunction
myFunction = function()
-- ...
end
biến Predeclaring cũng sẽ xảy ra là cách duy nhất để xác định một cặp chức năng địa phương lẫn nhau đệ quy:
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