局部变量
Lua 中的局部变量要用 local 关键字来显示定义,不用 local 显示定义的变量就是全局变量:
g_var = 1 -- global var
local l_var = 2 -- local var
局部变量的生命周期是有限的,它的作用域仅限于声明它的块( block )。
一个块是一个控制结构的执行体、或者是一个函数的执行体再或者是一个程序块( chunk )
我们可以通过下面这个例子来理解一下局部变量作用域的问题:
x = 10
local i = 1 --程序块中的局部变量
while i <=x do
local x = i * 2 --while 循环体中的局部变量
print(x) --打印 2, 4, 6, 8, ...
i = i + 1
end
if i > 20 then
local x --then 中的局部变量
x = 20
print(x + 2) --如果 i > 20 将会打印 22 ,此处的 x 是局部变量
else
print(x) --打印 10 , 这里 x 是全局变量
end
print(x) --打印 10
使用局部变量的一个好处是,局部变量可以避免将一些无用的名称引入全局环境,避免全局环境的污染。另外,访问局部变量比访问全局变量更快。同时,由于局部变量出了作用域之后生命周期结束,这样可以被垃圾回收器及时释放。
“尽量使用局部变量”是一种良好的编程风格
在 C 这样的语言中,强制程序员在一个块(或一个过程)的起始处声明所有的局部变量,所以有些程序员认为在一个块的中间使用声明语句是一种不良好地习惯。实际上,在需要时才声明变量并且赋予有意义的初值,这样可以提高代码的可读性。对于程序员而言,相比在块中的任意位置顺手声明自己需要的变量,和必须跳到块的起始处声明,大家应该能掂量哪种做法比较方便了吧?