我有以下代码,我想了解该加法器函数中变量的范围。它如何能够保留x
值?
function adder(x)
return function (y) return x + y end
end
a1 = adder(9)
a2 = adder(36)
print(a1(33)) -- 42 how this can able to retain the value of x
print(a2(64)) -- 100
当我第二次调用加法器函数时,我得到了42
。这怎么可能?
答案 0 :(得分:3)
此功能称为词法范围,或者是闭包。这意味着函数可以访问其封闭函数的变量。
function adder(x)
return function (y) return x + y end
end
匿名函数可以完全访问封闭函数x
中的局部变量adder
。 x
在匿名函数内被称为非全局变量(或由于历史原因而起价),因为它既不是全局变量也不是匿名函数的局部变量。
有关详细信息,请阅读More about Functions in Programming in Lua一章。