无论是多人直接团队合作,还是个人间接团队合作,程序都需要良好的好维护性。为了使程序具备更好的可维护性,让Js不产生冲突,需要避免全局变量的泛滥、合理使用命名空间、添加必要的注释。
1.工程师甲为了实现功能A写了一段代码,定义了全局变量a、b。工程师乙为了实现功能B写了一段代码,并在不知情的情况下也定义了同名变量a,他们都是直接定义在Window作用域下,同名变量间发生冲突。为了避免这种冲突,我们用匿名函数将脚本包起来,并且立即执行‘她’。
<div> xxxxxxx </div> <script type="text/JavaScript"> //功能A (function(){ var a=123, b = "Hello world"; })(); </script> <div> xxxxxxx </div> <script type="text/JavaScript"> //功能B (function(){ var a, c = "abc"; })(); </script> <div> xxxxxxx </div>
2.如果要在网页中添加功能C,而且功能C需要用到系功能A的变量b,简单的办法是将功能C的脚本写到功能A里,但是如果功能C由工程师丙实现,丙则需要花费大量精力去理解工程师甲写的脚本,带来时间资源的浪费,有人就会说了,我们可以通过添加全局变量实现不同功能块间的’通信‘,但是这样就背道而驰了,我们本来的目的是严格控制全局变量的数量。其实我们可以使用一个{}对象类型的变量作为全局变量,匿名函数间用来通信的变量可以作为全局变量的属性,这样既可以控制全局变量的数量,又可以保证扩展性。为了防止全局变量间的冲突,我们可以使用命名空间,如果程序非常复杂,变量名很多,可以进一步扩展命名空间生成二级命名空间,每个匿名函数的属性挂在命名空间下即可。(因为生成命名空间非常常用,我们可以进一步将生成命名空间功能定义成一个函数,方便调用)
<div>
xxxxxxx
</div>
<script type="text/JavaScript">
var GLOBAL={};
GLOBAL.namespace=function(str)
{
var arr =str.split('.'), o = GLOBAL;
for(i=(arr[0]='GLOBAL') ? 1 : 0;I < arr.length; i++)
{
o[arr[i]] = o[arr[i]] || {};
o = o[arr[i]];
}
}
</script>
<script type="text/JavaScript">
//功能A-----------------------
(function(){
var a=123, b = "Hello world";
})();
</script>
<div>
xxxxxxx
</div>
<script type="text/JavaScript">
//效果B-------------------
(function(){
var a, c = "abc";
})();
<div>
xxxxxxx
</div>
//功能C-----------------
<script type="text/JavaScript">
(function(){
var d='adang is very handsome!';
d =b +',' + d;
})()
</script>
3.添加必要的注释,可以大大提高代码可维护性,对于团队合作了来说,更是十分必要的。工程师应在自己脚本处添加注释,注释信息包括:功能说明、工程师姓名及联系方式、最后修改时间。