如何在不同的JS文件之间共享相同的作用域变量

How to share same scope variables between different JS files

本文关键字:共享 变量 作用域 之间 JS 文件      更新时间:2023-09-26

我有三个脚本文件。Main.js, script1.js, script2.js.

main.js只是将脚本包含到文档中:

function IncludeJs(sFileName) {
    document.writeln('<script type="text/javascript" src="' + sFileName + '"></script>');
}
IncludeJs("../script1.js");
IncludeJs("../script2.js");

script1.js和script2.js代码在同一个命名空间下。

script1.js:

var sharedNamespace = sharedNamespace || {}; 
(function () {
    "use strict";
     function func1(){
        ....
     }
}).apply(sharedNamespace );

script2.js:

var sharedNamespace = sharedNamespace || {}; 
(function () {
    "use strict";
     function func2(){
        return func1();
     }
}).apply(sharedNamespace );

func2不能工作,因为func1未定义。我怎么能把script1.js和script2.js在同一范围内与共享变量?

sharedNamespace.func1 = function(){}的解决方案对我来说是最糟糕的,因为我不想把这个函数暴露给使用我的库的客户端…

…我不想把这个函数暴露给使用我的库的客户端…

如果你有单独的脚本文件,你想让它们定义相互调用的函数,你别无选择。这是不可能有script1.jsscript2.js共享一个共同的作用域,也不能访问页面上的其他脚本。

相反,您可能希望将用于开发的单独文件组合起来用于部署,因为单个脚本(当然)可以拥有私有信息。(当然,除非用户编辑脚本,否则是私有的。)

例如,你可以这样写:

script1.js:

var internal = internal || {};
(function(i) {
    i.func1 = function func1() {
        // ...code here, possibly using i.func2()
    };
})(internal);

script2.js:

var internal = internal || {};
(function(i) {
    i.func2 = function func2() {
        // ...code here, possibly using i.func1()
    };
})(internal);

在进行开发时,您可以单独包含它们,因此任何代码都可以使用internal.func1。但是,当您在一个脚本中构建所有内容时,您会将其包装为

(function() {
    // ...contents of script1.js here...
    // ...contents of script2.js here...
})();

现在,internal对合并的脚本是私有的。

这是我的头;