Lua 學習 閉包
先看一個現象
function count()
local i = 6 -- upvalue
return function()
i = i+1
return i
end
end
local c1 = count()
print(c1())
print(c1())
print(c1())
local c2 = count()
print("c2",c2())
這一點 類似於 JavaScript
- function count 返回一個函數; 在 這個函數 外面有一個變量 i ; 是一個 upvalue,
- 函數 c1 是在 count 函數外面執行的, 這時候 lua 會把這個 upvalue (上下文)緩存。就會產生 累加的效果
- 函數 c2 與 函數 c1 是 count 函數 不同的作用域 ; 所以 upvlaue 的變量不會再 兩個函數中 (c1,c2)中間傳導