Как получить доступ к переменным внутри одного IIFE из другого, используя шаблоны? - PullRequest
0 голосов
/ 24 июня 2018

В файле base.html есть некоторая логика. Я хочу упростить соответствующий ему файл js и отложить в сторону некоторые функции.

Есть ли способ доступа к переменным внутри одного IIFE (main.js) из другого (additional.js)?

base.html

<body>
    <script src="main.js"></script>
    {% block extra_scripts %}
    {% endblock %}
</body>

main.js

(function(){
    var test = 123;
})();

extension.html

{% extends "base.html" %}
{% block extra_scripts %}
    <script src="additional.js"></script>   
{% endblock %}

additional.js

(function(){
    alert(test);
})();

Это решение дает мне неопределенное значение.

Ответы [ 4 ]

0 голосов
/ 24 июня 2018

Вы можете сделать это, если превратите его в модуль js.

var mainModule = (function(){
    var test = 123;

    return {
       getTest: function() { return test;}
    }
})();

, а затем в extra.js

mainModule.getTest();
0 голосов
/ 24 июня 2018

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

var test;
(function(){
    test = 123;
})();

Теперь, когда

(function(){
    alert(test);
})();

выполняется test находится внутриобъем и, следовательно, доступны.Тем не менее, порядок должен быть сохранен, иначе тест будет undefined, поскольку он еще не определен.

0 голосов
/ 24 июня 2018
Переменная

, находящаяся в области действия на уровне функций, недоступна снаружи.Либо определите переменную снаружи, либо добавьте ее в объект окна, чтобы получить к ней доступ.

main.js

(function(){
    window.test = 123;
})();

Additional.js

(function(){
    alert(test);
})();
0 голосов
/ 24 июня 2018

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

Вы можете глобально объявить переменную test

...