Как получить доступ к переменным из закрытой функции Javascript? - PullRequest
1 голос
/ 24 апреля 2019

Предположим, у меня есть функция в моем html-файле, например

<script>
        ;(function(){
            function execute(output) {
                 return output;
            }
        })();
</script>

, а затем еще одна

<script>
        ;(function(){
            console.log(execute('test'));
        })();
</script>

Теперь я получаю ReferenceError: execute is not defined

Как я могуполучить доступ к этой execute функции, если она содержится в другой закрытой функции?

Ответы [ 3 ]

1 голос
/ 24 апреля 2019

почему это происходит

Javascript имеет область действия функции.Это означает, что все переменные и функции, объявленные внутри функции, доступны только внутри этой функции

как это исправить

Если вы используете пакет, то ярекомендовал бы вам обратиться к модулям ES6.

Если нет, то простой, но грязный способ исправить это - назначить его глобальному объекту (window в браузере и global в узле)

пример

function myGlobalFunction() { alert('it works') }
window.myGlobalFunction = myGlobalFunction

Просто убедитесь, что они загружены в правильном порядке

1 голос
/ 25 апреля 2019

Поскольку JavaScript имеет область действия функции , если вы объявили функцию или переменную внутри функции, к ней можно получить доступ или ссылаться только в области действия этой родительской функции. Однако вы можете вернуть сопоставление объектов дочерних функций в родительской функции, как в приведенном ниже примере фрагмента. Не уверен, что это больше, чем вы ищете?

let executeScope = (function() {

  function init() {
    // do some init work here..
  }

  function execute(input) {
    let output = input * 2;
    return output;
  }

  function test() {
    console.log('test');
  }

  return {
    init: init,
    execute: execute,
    test: test
  };
})();

executeScope.init();
console.log(executeScope.execute(2));
executeScope.test();
1 голос
/ 24 апреля 2019

Чтобы получить доступ к заранее определенной переменной (или функции), переменная (или функция) должна находиться в области видимости. Простейшим способом будет глобальная область действия execute. Возможно, это плохая практика (и кажется бесполезной из-за упрощения вашей закрытой функции), но без дальнейшего контекста вашей ситуации мы не можем предложить более точные решения:

<script>
        ;(function(){
            window.execute = output => {
                 return output;
            }
        })();
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...