Lua - 函数中的本地变量作用域

我有以下函数

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()本地变量的权限?

点赞
用户621962
用户621962

test2 可以访问已经声明过的变量。顺序很重要,所以在 test2 之前先声明 a

function test()

    local a; -- 相同的作用域,先声明

    local function test2()
        print(a);
    end

    a = 1;

    test2(); -- 输出 1

end

test();
2016-04-26 16:03:04
用户107090
用户107090

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

2016-04-26 19:05:47