我有以下功能
function test()
local function test2()
print(a)
end
local a = 1
test2()
end
test()
这打印出零
以下脚本
local a = 1
function test()
local function test2()
print(a)
end
test2()
end
test()
打印出来。
我不明白这一点。我认为声明一个局部变量使它在整个块中有效。由于变量' a'在test() - 函数作用域中声明,并且test2() - 函数在同一作用域中声明,为什么test2()不能访问test()局部变量?
答案 0 :(得分:5)
test2
可以访问已经声明的变量。订单很重要。因此,请在a
之前声明test2
:
function test()
local a; -- same scope, declared first
local function test2()
print(a);
end
a = 1;
test2(); -- prints 1
end
test();
答案 1 :(得分:3)
在第一个示例中你得到nil,因为在使用a
时没有看到a
的声明,因此编译器声明a
是全局的。在致电a
之前设置test
即可。但如果您将a
声明为本地,则不会。