Справочное руководство по языку 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.