先思考下面這個問題:
local function counter()local count = 0return function()count = count + 1return countend
endlocal a = counter()
local b = counter()print(a()) --> ?
print(a()) --> ?
print(b()) --> ?
print(a()) --> ?
輸出結果:
print(a()) --> 1
print(a()) --> 2
print(b()) --> 1
print(a()) --> 3
問題1:為什么每一次print(a())的結果都不一致呢?函數體內的count不應該是一個臨時變量嗎,怎么在調用之前會在上一次調用的結果后進行計算?
分析原因🤔:這是由于閉包引起的,由于return內寫的函數里對count有所引用,因此在每次調用完a后,變量count并沒有被銷毀
問題2:為什么a的值與b的值不會相互影響?
回答🤔:a和b都是由counter()返回的閉包函數實例,它們分別捕獲了不同的count
變量副本,因此它們的計數是相互獨立的。