Задать вопрос
@mikilikala
На фронте

Нормально ли создавать функции внутри функций?

Есть два примера.
Первый:
function fun1() {
  // код...
  // вызов какой-то из функций
  function fun2() {
    // код...
    // вызов какой-то из вложенных функций
  }
  function fun3() {
    // код...
    // вызов какой-то из вложенных функций
  }
  function fun4() {
    // код...
    // вызов какой-то из вложенных функций
  }
}


И второй:
function fun1() {
  // код...
  // вызов какой-то из функций
}

function fun2() {
  // код...
  // вызов какой-то из функций
}
function fun3() {
  // код...
  // вызов какой-то из функций
}
function fun4() {
  // код...
  // вызов какой-то из функций
}


В первом случае я создаю функции внутри другой функции чтобы они не были доступны за её пределами. Например для того, чтобы я смог создавать функции с такими же именами но уже в другой функции.
Сам вопрос:
Это бред и не стоит писать как в первом варианте? Или без разницы?
  • Вопрос задан
  • 133 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
В принципе можно.
Но может тогда лучше класс создать с необходимыми методами?

class fun1 {
  constructor(){
    // код...
    this.#fun2();
  }
  #fun2() {
    // код...
    this.#fun3();
  }
  #fun3() {
    // код...
    // вызов какой-то из вложенных функций
  }
  #fun4() {
    // код...
    // вызов какой-то из вложенных функций
  }
}

const f1 = new fun1();
Ответ написан
Комментировать
Почему-бы и нет? Все что позволяет сделать язык можно использовать. Почти всегда это может найти какое-нибудь оправдание.

Но если вам надо
создавать функции с такими же именами но уже в другой функции.

то здесь уже похоже что-то не так. Почему у разных функций одинаковые имена? Зачем вообще могут понадобиться функции с одинаковыми именами? Нельзя ли их обобщить?

Кроме того зачем имена функций внутри функции? Может быть есть смысл создать там анонимные функции? Или лучше создать класс/объект?

Неплохо бы увидеть реальный код, а не вот такой вот общий пример.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы