我有三个脚本文件.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(){}对我来说是最糟糕的,因为我不想将此功能公开给使用我的库的客户端...
...我不想将此功能公开给使用我的库的客户...
如果您要拥有单独的脚本文件,并且希望它们定义相互调用的函数,那么您别无选择.拥有script1.js和script2.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对于组合脚本是私有的.
这不是我的头脑; 可能没有那么麻烦的方式......
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |