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

时间:2016-11-13 14:46:41

标签: 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");

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(){}的解决方案对我来说最糟糕,因为我不想将此功能公开给使用我的库的客户...

1 个答案:

答案 0 :(得分:5)

  

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

如果您要拥有单独的脚本文件,并且希望它们定义相互调用的函数,那么您别无选择。 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对于组合脚本是私有的。

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