全局变量和局部变量

很抱歉如果这是一个非常基础的问题,但我是一个初学者,对于区分局部变量和全局变量有些困惑。例如:

variable=0
local variable=0
function func()
    local variable=0
    variable=0
    if variable==0 then
        local variable=1
    end
end
  • 我有多少个独立的变量?
  • 在 if 语句块中哪个变量被重新赋值?还是它是一个与其他所有变量不同的新变量?
  • if 语句测试哪个变量?
  • 如何在函数内的 if 语句块中设置一个新值给第一个局部变量?那不就是实例化一个受限于 if 语句块的新变量吗?

任何帮助将不胜感激!

点赞
用户646619
用户646619

(1) 我有多少个单独的变量?

有四个:三个本地变量和一个全局变量。虽然“全局变量”只是函数环境中的一个字段(_G)。

(2) 在 if 语句块中哪个变量被重新赋值?还是它是一个与其他所有变量分开的新变量?

创建一个新变量,为栈中更高位置的变量遮盖。

(3) if 语句正在针对哪个变量进行测试?

第二个“local”变量,定义在“function func()”之后。

(4) 如何在 if 语句块中的函数中将新值设置为第一个本地变量?

在定义一个新遮盖旧变量的“local”之前,您必须设置它。之后,它是不可能的(也许使用调试库除外)。

这是您的示例,其中一些值已编辑并且一些打印语句用于演示 Lua 中的作用域规则:

variable=123
print(variable) -- 输出123
local variable=0
print(variable) -- 输出0
function func()
    local variable=1
    variable=1
    print(variable) -- 输出1
    if variable==1 then
        print(variable) -- 输出1
        local variable=5
        print(variable) -- 输出5
    end
    print(variable) -- 输出1
end
func()
print(variable) -- 输出0
print(_G.variable) -- 输出123
2015-03-28 03:44:20