Lua - 函数中的局部变量作用域

Lua - Local variable scope in function

我有以下功能

function test()

  local function test2()
      print(a)
  end
  local a = 1
  test2()
end

test()

这会打印出 nil

以下脚本

local a = 1
function test()

    local function test2()
        print(a)
    end

    test2()
end

test()

打印出 1。

这个我不明白。我认为声明一个局部变量会使它在整个块中有效。既然变量'a'是在test()-函数作用域中声明的,而test2()-函数也是在同一作用域中声明的,为什么test2()不能访问test()局部变量?

test2 可以访问已经声明的变量。订单很重要。所以,在 test2:

之前声明 a
function test()

    <b>local a;</b> -- same scope, declared first

    local function test2()
        print(a);
    end

    a = 1;

    test2(); -- prints 1

end

test();

您在第一个示例中得到 nil,因为在使用 a 时没有看到 a 的声明,因此编译器将 a 声明为全局变量。在调用 test 之前设置 a 将起作用。但如果您将 a 声明为本地,则不会。