原则
用匿名函数将脚本包起来;
使用多级命名空间。
这第二条“使用多级命名空间”这个,我觉得并不是很完美的好主意。因为如果级数太多的话会造成变量名字变得长的一逼。
改进过程
原始代码
没有做过任何优化的满目疮痍的代码。a.js 和 b.js 都有全局变量 window.a
,导致冲突,全局变量属于 window
作用域下的。
//a.js//b.js
使用匿名函数
通过匿名函数改变了a.js 和 b.js 中的变量 a 的作用域,使得他们都不再是全局变量了,但是在 b.js 中无法访问在 a.js 中的变量 a, 换而言之,他们之间没办法通信了。
//a.js(function() { var a = 123, b = "hello world";})();//b.js(function() { var a, c = "abc";})();
使用全局变量进行通信
var str;//a.js(function() { var a = 123, b = "hello world"; window.str = a;})();//b.js(function() { var a, c = "abc"; alert(window.str);})();
使用 window.str
这种全局全局变量作为通信的媒介其实并不是一个好办法,这样做会导致全局变量越来越多,反而不好维护。
使用命名空间
var GLOBAL = {};//a.js(function() { var a = 123, b = "hello world"; GLOBAL.A.a = a;})();//b.js(function() { var a, c = "abc"; alert(GLOBAL.A.a);})();
使用单一的全局变量 GlOBAL ,匿名空间里需要保存的属性都在全局变量 GLOBAL 的基础上使用命名空间的方式进行拓展。这里给命名空间起名字也需要很讲究,好的命名规则会对团队协同合作有很大的帮助。具体的命名方式待我卖个关子,以后再说。