Существует ли какой-либо способ вызвать функцию, вложенную в другую функцию?

#javascript

Вопрос:

Допустим, у меня есть следующая функция:

 function a() {

  function b() { 
    console.log('b') 
  }

  console.log('a')
  b()
}

a()
 

Из внешней области, когда я вызываю function a() , я получаю следующий результат

 a()
> 'a'
> 'b'
 

Есть ли у меня какой-либо способ вызвать function b() непосредственно из внешней области без изменения исходной функции? Из внешней области, к которой у меня есть только доступ a . Что-то вроде этого:

 a.b()
> 'b'
 

Мне нужно любое возможное грязное решение.

Комментарии:

1. Нет, ты не можешь. Это проблема XY ?

2. Невозможно без обновления функции. Одна из причин , по которой люди пишут функции таким образом, заключается в том, чтобы предотвратить их вызов извне.

3. @VLAZ Контекст заключается в том, что я использую history пакет npm, который отслеживает историю браузера в памяти, но не предоставляет историю разработчику. Мне нужен доступ к истории, и я предпочитаю не переписывать свою собственную реализацию, а использовать оригинал history package . Хотя я полагаю, что ответ заключается в том, что вместо этого я должен просто клонировать их код.

Ответ №1:

Там нет ничего, на что можно было бы ссылаться b после a() запуска, поэтому оно полностью недоступно. В зависимости от того, какова конечная цель — в качестве очень грязного решения вы могли бы a.toString() затем сбросить внутренние части в eval .

Ответ №2:

Вы можете сделать это , если вернете ссылку на эту функцию a , но вам придется ее изменить.

 function a() {

  function b() { 
    console.log('b') 
  }

  console.log('a')
  b()

  return b;
}


const b = a()
b();
 

Комментарии:

1. » без изменения исходной функции »