Для 2: пространство имен новой функции не входит в пространство имен вызывающей функции: оно полностью отделено.Внутренняя функция не имеет доступа к переменным, используемым во внешней.Вызов создает новое пространство имен, но оно не вложено в пространство вызывающей функции.
Я не знал 3, но это имеет смысл.Функция вызывается, и имя не добавляется в пространство имен, потому что это не нужно.Он не добавляется в пространство имен функции, потому что он уже находится в глобальном пространстве имен (или в определении класса), и обычно можно предположить, что функция имеет соответствующий доступ к нему по мере необходимости.И ссылка будет бесполезной, когда функция вернется, поэтому нет смысла добавлять ее в пространство имен.
Пространство имен - это вопрос того, кто что увидит.Таким образом, фрагмент кода знает только определения вещей в пространствах имен, к которым он имеет доступ.Функция имеет доступ к своему личному пространству имен (другие функции не видят этого) и глобальной области видимости / пространству имен (все могут видеть это).Думайте об этом как о файловых каталогах на вашем компьютере.У вас может быть два файла с одинаковыми именами, если они находятся в разных каталогах, а пространства имен удобны по большинству тех же причин, что и каталоги.Пространства имен помогают вам упорядочить ваш код и сделать его более модульным, вместо того, чтобы создавать чрезвычайно сложные зависимости между удаленными областями кода, и, как правило, избавляют вас от необходимости отслеживать все имена переменных в потенциально миллионах строк кода.