0

考虑:

函数函数名(var_one,var_two)
    var_one = var_two
    返回 var_one
结尾

打印(函数名(“string_one”,“string_two”))

local var_one = var_two

现在是var_one全局变量还是仍在函数本地范围内?

应该local var_one使用还是已经在范围内?

4

2 回答 2

3

不,没有这个必要。该名称var_one已经是本地名称。您只是在消除原始价值。_G.var_one如果您希望显式引用全局,则必须使用。

于 2012-05-29T20:22:03.270 回答
0

参数是一个局部变量(已经)。

当您引用它(赋值)时,它会查找具有该名称的词法范围变量。它找到局部变量并使用它。

如果函数是闭包,则该局部变量将成为“上值”(非局部变量)。

如果它没有找到局部变量,它将执行全局查找。如果要强制进行全局查找,只需手动进入全局表,因为这就是全局查找。

如果您更改变量的赋值以将其声明为本地,您实际上是在创建一个新的局部变量,它是词法作用域的,它与参数不同,但在词法上隐藏了它。

于 2012-08-28T12:13:37.320 回答