Lua中的作用域规则

我正在测试 Lua 的作用域,并发现了一些意外的情况。以下代码不会打印出 localMainVariable。

function functionScope()
    print( "\nIn function")
    print( "globalMainVariable: " .. globalMainVariable )
    if (localMainVariable ~= nil) then print( "localMainVariable: " .. localMainVariable ) end
end

globalMainVariable = "Visible"
local localMainVariable = "Visible"
functionScope()

但是以下代码会打印 localMainVariable。

globalMainVariable = "Visible"
local localMainVariable = "Visible"

function functionScope()
    print( "\nIn function")
    print( "globalMainVariable: " .. globalMainVariable )
    if (localMainVariable ~= nil) then print( "localMainVariable: " .. localMainVariable )  end
end

functionScope()

我知道这与 localMainVariable 的声明位置有关,但我以为将其设置为 local,会限制变量的作用域。实际规则是什么?

谢谢

点赞
用户1847592
用户1847592

本地变量的范围始于其声明之后的第一条语句,并持续到包括声明的最内层块的最后一个非 void 语句。

【Lua 手册】(http://www.lua.org/manual/5.2/manual.html#3.5)

2013-03-23 17:43:50