您好,登錄后才能下訂單哦!
若將一個函數寫在另一個函數之內,那么這個位于內部的函數便可以訪問外部函數的局部變量。
function newCounter()
local i = 0
return function()----匿名函數
i = i + 1
return i
end
end
c1 = newCounter()
c2 = nweCounter()
print(c1())---->1
print(c1())---->2
print(c2())---->1
print(c1())---->3
print(c2())---->2
在匿名函數內部,i既不是全局變量也不是局部變量,將其稱為“非局部的變量”。
初看上去,由于創建變量i的newCounter函數已經返回,所以之后每次調用匿名函數時,i都應該超出了作用域。但是其實lua會以closure機制來處理這種情況。closure就是一個函數加上該函數所訪問的所有“非局部的變量”。如果再次調用newCounter時,那么會新創建一個新的局部變量i,從而產生一個新的closure,上面c1和c2是同一個函數創建的兩個不同的closure,它們各自擁有局部變量i的實例,它們各自獨立,導致打印結果沒有關聯。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。