为了避免变量之间的覆盖与冲突,可以生成命名空间,命名空间是一种特殊的前缀,在js中,通过{ }对象实现。
在不同的匿名函数中,根据功能声明一个不同的命名空间,每个匿名函数中global对象的属性都不直接挂在global上,而是挂在次匿名函数的命名空间下,如:
<script type="text/javascript"> <br>var GLOBAL={} <br></script>
<script type="text/javascript"> <br>(function(){ <br>var a=123, a1=256; <br>GLOBAL.A={} <br>GLOBAL.A.str=a; <br>})(); <br></script>
<script type="text/javascript"> <br>(function(){ <br>var b1=123, b2=256; <br>GLOBAL.B={} <br>GLOBAL.B.str=a; <br>})(); <br></script>
如果同一个匿名函数中的程序非常复杂,变量名很多,命名空间可以进一步扩展,生成二级命名空间:
<script type="text/javascript"> <br>var GLOBAL={} <br></script>
<script type="text/javascript"> <br>(function(){ <br>var a=123, a1=256; <br>GLOBAL.A={}; <br>GLOBAL.A.CAT={}; <br>GLOBAL.A.DOG={}; <br>GLOBAL.A.CAT.name="mini"; <br>GLOBAL.A.CAT.move=function(){ <br>} <br>GLOBAL.A.DOG.name="mini"; <br>GLOBAL.A.DOG.move=function(){ <br>} <br>})(); <br></script>
因生成命名空间是非常常用的功能,可以进一步将生成命名空间的功能定义成一个函数,方便调用,如下:
<script type="text/javascript"> <br>var GLOBAL={} <br>GLOBAL.namespace=function(str){ <br>var arr=str.split("."), o=GLOBAL; <br>for(i=arr[0]=="GLOBAL"?1:0;i<arr.length; i++){ <br>o[arr[i]]=o[arr[i]] || {}; <br>o=o[arr[i]]; <br>} <br>} <br></script>
调用命名空间具体操作:
<script type="text/javascript"> <br>//============================================================= <br>// 功能A <br>// 工程师甲 <br>// email:ctkl68945@gmail.com msn:ctkl68945@hotmail.com" <br>// 2012-11-06 <br>//============================================================= <br><br>(function(){ <br>var a=123, a1="hello world"; <br>GLOBAL.namespace("A.CAT"); <br>GLOBAL.namespace("A.DOG"); <br>GLOBAL.A.CAT.name="mini"; <br>GLOBAL.A.CAT.move=function(){ <br>} <br>GLOBAL.A.DOG.name="mini"; <br>GLOBAL.A.DOG.move=function(){ <br>} <br>GLOBAL.A.str=a; <br>GLOBAL.A.str1=a1; <br>})(); <br></script>
依次类似,无论多人的直接团队开发,还是个人的间接团队合作,都需要良好的可维护性。
1、添加必要的代码注释
2、让JS不产生冲突,需避免全局变量的泛滥,合理使用命名空间











