Я сделаю несколько предположений здесь. Похоже, ваш код оценивается какой-то библиотекой (eval-вызов упоминается в сообщении об ошибке). Может случиться так, что он уклоняется от блока кода за блоком отдельно и эффективно создает несколько контекстов. Теперь функция AnimalMaker
находится в одном, а вызов - в другом. Таким образом, действительно, в контексте вызова функция не определена.
Чтобы справиться с этим, я бы определил функцию в хорошо известном общем контексте. Например. если вы выполняете свой код в браузере, вы можете определить свою функцию следующим образом:
window.AnimalMaker = function(name) { ... }
Вызов остается неизменным, имеет window
в контексте и не должен иметь проблем с вызовом функции.
(если это не сработает, вам, вероятно, нужно дать больше информации о том, как вы выполняете код)