2

我有以下代码,我想了解该加法器函数中变量的范围。它如何能够保留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当我第二次调用那个加法器函数时,我得到了。这怎么可能在这里?

4

1 回答 1

3

这个特性被称为词法作用域,或者它是一个闭包。这意味着函数可以访问其封闭函数的变量。

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

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

有关详细信息,请阅读更多关于Lua 编程中的函数一章。

于 2013-09-19T01:06:30.867 回答