如何在不同的JS文件之间共享相同的范围变量

Ole*_*ich 0 javascript

我有三个脚本文件.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");
Run Code Online (Sandbox Code Playgroud)

script1.js和script2.js代码位于相同的命名空间下.

script1.js:

var sharedNamespace = sharedNamespace || {}; 

(function () {

    "use strict";

     function func1(){
        ....
     }

}).apply(sharedNamespace );
Run Code Online (Sandbox Code Playgroud)

script2.js:

var sharedNamespace = sharedNamespace || {}; 

(function () {

    "use strict";

     function func2(){
        return func1();
     }

}).apply(sharedNamespace );
Run Code Online (Sandbox Code Playgroud)

func2无法正常工作,因为func1未定义.我如何将script1.js和script2.js放在同一范围内的共享变量?

解决方案sharedNamespace.func1 = function(){}对我来说是最糟糕的,因为我不想将此功能公开给使用我的库的客户端...

T.J*_*der 5

...我不想将此功能公开给使用我的库的客户...

如果您要拥有单独的脚本文件,并且希望它们定义相互调用的函数,那么您别无选择.拥有script1.jsscript2.js共享页面上其他脚本无法访问的公共范围是不可能的.

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

例如,您可能会遇到以下情况:

script1.js:

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

script2.js:

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

在进行开发时,您可以单独包含它们,因此任何代码都可以使用internal.func1.但是当你做一个一体化的脚本构建时,你会把它包裹起来

(function() {
    // ...contents of script1.js here...
    // ...contents of script2.js here...
})();
Run Code Online (Sandbox Code Playgroud)

现在,internal对于组合脚本是私有的.

这不是我的头脑; 可能没有那么麻烦的方式......