Вы должны поместить это в глобальный охват, по нескольким причинам.
Вложение вспомогательной функции в вызывающую сторону увеличивает длину вызывающей стороны. Длина функции почти всегда является отрицательным показателем; короткие функции легче понять, запомнить, отладить и поддерживать.
Если у вспомогательной функции есть разумное имя, достаточно прочитать это имя без необходимости видеть определение рядом. Если вы делаете потребность увидеть определение помощника для того , чтобы понять функцию вызывающего абонента, то , что абонент делает слишком много, или работает слишком много уровней абстракции одновременно.
Наличие помощника в глобальном масштабе позволяет другим функциям вызывать его, если, в конце концов, он вообще становится полезным. Если помощник недоступен, у вас возникает соблазн вырезать и вставить его, или забыть, и плохо его переопределить, или сделать другую функцию длиннее, чем она должна быть.
Вложенность вспомогательной функции увеличивает соблазн использовать переменные из области видимости вызывающего без объявления, так что становится неясно, каковы входы и выходы помощника. Если функция не указывает четко, с какими данными она работает и как она влияет, это обычно является признаком неясной ответственности. Объявление помощника задницей автономной функцией заставляет вас знать, что она делает на самом деле.
редактировать
Это оказалось более спорным вопросом, чем я думал. Чтобы уточнить:
В JavaScript большие функции, охватывающие файлы, часто выполняют роль классов, потому что язык не предоставляет никакого другого механизма ограничения объема. Конечно, вспомогательные функции должны идти внутри таких квазиклассов, а не вне их.
И дело о более легких предполагает повторного использования , что если подпрограмма действительно становится все более широко используются, вы готовы , чтобы переместить его из места в целом и поместить его в нужном месте, например , в строке служебной библиотеке или в ваш глобальный реестр конфигурации. Если вы не хотите упорядочивать свой код таким образом, вы можете также вложить подпрограмму, как если бы вы делали это с обычным объектом метода на более «блочном» языке.