lua脚本:需要帮助才能理解变量的范围

时间:2013-09-19 00:50:55

标签: lua closures scope

我有以下代码,我想了解该加法器函数中变量的范围。它如何能够保留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。这怎么可能?

1 个答案:

答案 0 :(得分:3)

此功能称为词法范围,或者是闭包。这意味着函数可以访问其封闭函数的变量。

function adder(x)
    return function (y) return x + y end
end

匿名函数可以完全访问封闭函数x中的局部变量adderx在匿名函数内被称为非全局变量(或由于历史原因而起价),因为它既不是全局变量也不是匿名函数的局部变量。

有关详细信息,请阅读More about Functions in Programming in Lua一章。