## 作用域
Lua的作用域以关键字`end`进行标识。
对于变量,有一条原则:在一切能使用`local`修饰的情况下,使用`local`进行修饰。
因为不用`local`修饰的变量会自动变成全局变量。全局变量十分危险,很容易被篡改而不知道在哪里被篡改了,这很容易导致顽固的bug出现。并且全局变量的处理速度也比局部变量的速度要慢很多。
所以,尽可能的用`local`来修饰变量。
有时候,用`do .. end`可以用来明确限定局部变量的作用域。
~~~
local v
do
local x = u2*v3-u3*v2
local y = u3*v1-u1*v3
local z = u1*v2-u2*v1
v = {x,y,z}
end -- x,y,z的作用域结束,被系统清理
local count
do
local x = 0
count = function() x = x + 1; return x end
end -- x的作用域结束,被系统清理
~~~