如何使用模板从一个 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();
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();