Язык в вопросе не указан. В Python вложенную функцию объявлять можно: ее имя по умолчанию локально для внешней функции. При этом сам объект функции можно вернуть или передать наружу. Вложенная функция может читать переменные внешней области, образуя замыкание; для перепривязки такой переменной используется nonlocal.
Можно ли объявлять функцию внутри другой функции и где она будет видна?
Объяснение вложенных функций и замыканий на явно выбранном примере Python: локальное имя, возврат функции наружу и доступ к переменным внешней области.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Ответ зависит от языка, который в вопросе не указан. Рассмотрим Python как пример, не предполагая, что именно он использовался на исходном собеседовании. В Python функцию можно определить внутри другой функции. Когда выполнение доходит до внутреннего def, создается объект функции, а его имя связывается в локальной области внешней функции.
def outer():
value = 7
def inner():
return value
return inner
f = outer()
print(f()) # 7
Имя inner непосредственно снаружи outer недоступно, если отдельно не определено в другой подходящей области. Но объект функции можно вернуть, как в примере, сохранить под другим именем и вызывать после завершения outer. Значит, локальная видимость имени не означает запрет на использование самого объекта функции вне внешнего вызова.
В примере внутренняя функция обращается к value из окружающей области. Это замыкание: необходимая связь с внешней переменной сохраняется, пока она нужна функции. Не следует представлять это как обязательное копирование значения в момент объявления.
Для чтения переменной внешней функции nonlocal не требуется. Если нужно переприсвоить именно эту внешнюю переменную, используют nonlocal; обычное присваивание по умолчанию создает локальную переменную внутренней функции.
Вложенные функции удобны для небольших вспомогательных действий и фабрик функций. Однако глубокая вложенность усложняет чтение и самостоятельную проверку логики. На интервью сначала уточните язык: правила определения, видимости и времени жизни в других языках могут отличаться.