Справочное руководство по языку Lua 5.1 :: 2.6 - Значения и типы
2.6 – Области видимости
Lua язык с лексическим разграничением областей видимости. Область видимости переменной начинается первым выражением после ее объявления и действует до конца блока, в котором это объявление встречается. Рассмотрим следующий пример:
x = 10 -- глобальная переменная variable
do -- начало блока
local x = x -- объявление локальной переменной
print(x) --> 10
x = x+1
do -- начало вложенного блока
local x = x+1 -- другая локальная 'x'
print(x) --> 12
end
print(x) --> 11
end
print(x) --> 10 (глобальная переменная)
Отметим, что в объявлении local x = x локальная переменная объявляется еще не в области своей видимости, поэтому присваивается именно внешняя переменная.
В соответствии с правилами лексического разграничения областей видимости, локальные переменные доступны в функциях, определенных внутри их области видимости. Локальная переменная, используемая в таких функциях, называется внешней локальной переменной (по отношению к определенной внутри ее области видимости функции).
Обработка каждого объявления local ведет к созданию новой локальной переменной. Рассмотрим следующий пример:
a = {}
local x = 20
for i=1,10 do
local y = 0
a[i] = function () y=y+1; return x+y end
end
Цикл создает 10 экземпляров функции, в которых используются различные переменные y и один и тот же x.