Вы создаете значение до со следующим кодом:
local b="local"
function problem(_ENV)
b="fn_b"
end
Во время синтаксического анализа интерпретатор функции обнаруживает, что эта функция ссылается на локальную переменную из одной из охватывающих областей, видимых извнутри функции и, таким образом, связывает ее напрямую.Доступ к локальным переменным предшествует поиску глобальных переменных в _ENV
.Если вы поставите local b="local"
после определения функции, она не будет изменена при вызове функции.