如何使用模板从一个 IIFE 访问另一个 IIFE 中的变量?

How to access variables inside one IIFE from another using templates?

base.html 文件中有一些逻辑。我想让它对应的 js 文件更简单,并把一些功能放在一边。

有没有办法从另一个 (additional.js) 访问一个 IIFE (main.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);
})();

这个 给了我未定义的。

函数内部定义的变量仅在该函数内有作用域,不能在外部访问。

您可以全局声明变量test

一种方法是在外部声明变量并使其成为全局变量以供其他函数访问。

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

现在,当

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

runs test 在范围内,因此可以访问。但是,需要维护顺序,否则测试将 undefined 因为它尚未定义。

不能在外部访问函数级别范围内的变量。要么在外部定义变量,要么将其添加到 window 对象中以便访问。

main.js

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

additional.js

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

转成js模块就可以了

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

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

然后在 additional.js

mainModule.getTest();