|局部变量和块(block)

text":"lua提供了局部变量 , 通过local语句来创建局部变量:
j = 10      ?    ?    ?    ?--全局变量
local i = 10    ?    ?    ?--局部变量
与全局变量不同的是 , 局部变量的作用域仅限于声明它们的块 。
一个块(block)是一个控制结构的执行体、或者是一个函数的执行体再或者是一个程序块(chunk)
x = 10
local i = 1     ?    ?    ?-->程序块中的局部变量
while i<= x do
local x = i * 2    ?    ?--while循环体中的局部变量

print(x)    ?    ?    ?    ?  -->2468...

i = i + 1

end
if i > 20 then
local x    ?    ?    ?--then中的局部变量

x = 20

print(x + 2)    ?--如果测试成功会打印22

else
print(x)    ?    ?    ?-->10(全局变量)

end
print(x)    ?    ?    ?    ?-->(全局变量)
如果我们在交互模式下(人机交流对话框) , 我们输入的每一行内容就会形成一个程序块(这里的程序块是一个独立的 , 在输入是会提示你 , 是一个完整的指令 , 命令行提示符显示一个>如果不完整则会提示一个>>)上面这段代码输入到交互模式下不会按照预期工作 , 就是这个原因 。 如何才能按照预期工作 , 怎么解决呢?
我们可以把这些内容放到一个do-end中 。 当我们输入do时 , lua就不会单独地执行后面每行地内容 , 而是直到遇见一个对应地end时 , 才会执行整个块的内容 。
我们在写程序的时候 , 尽可能地使用局部变量 , 这是一种良好地编程习惯 。 局部变量可以避免将一些无用的名称引入到全局环境 。 并且访问局部变量比全局变量更快 , 更重要的是一个局部变量通常会随着其作用域结束而消失 , 这样便使垃圾收集器可以释放其值 。 和全局变量一样 , 在声明局部变量的时候可以进行初始化 , 也就是可以给它赋值 , 没有赋值的话默认被初始化为nil 。
local ab = 110
if a < b then
print(a)    ?    ?-->1

local a     ?    ?-->具有隐式的“=nil”

print(a)        -->nil
end
print(ab)    ?    ?-->1    ?10
我们在lua中 , 可以用局部变量来保存全局变量
local foo = foo
【|局部变量和块(block)】这句代码创建了一个局部变量foo , 并将用全局变量foo的值初始化它 。 如果后续其它函数改变了全局foo的值 , 那么可以在这里先将它的值保存起来 。 这种方式还可以加速在当前作用域对foo的访问 。
"


    推荐阅读