Lua中的范围规则

use*_*829 6 lua scope

我正在测试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()
Run Code Online (Sandbox Code Playgroud)

但是下面的代码确实打印了localMainVariable.

globalMainVariable = "Visible"
local localMainVariable = "Visible"

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

functionScope()
Run Code Online (Sandbox Code Playgroud)

我知道它与声明localMainVariable的位置有关,但我认为将其设置为local会限制变量的范围.什么是实际规则?

谢谢

Ego*_*off 5

局部变量的范围从其声明后的第一个语句开始,一直持续到包含声明的最内层块的最后一个非void语句.

Lua手册