我有三个脚本文件。 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(){}
的解决方案对我来说最糟糕,因为我不想将此功能公开给使用我的库的客户...
答案 0 :(得分:5)
...我不想将此功能公开给使用我的图书馆的客户......
如果您要拥有单独的脚本文件,并且希望它们定义相互调用的函数,那么您别无选择。 script1.js
和script2.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
对于组合脚本是私有的。
这是我的头脑;可能没有那么麻烦的方式......