JS中避免命名冲突

一个项目可能由多个工程师完成,一个人可能需要完成多个JS文件。

在这个情况下,如何避免命名冲突呢?这个时候我们需要对全局变量进行控制,进行切忌全局变量使用泛滥。

方法1:使用匿名函数将包含脚本。让变量的作用域控制在匿名函数里面。

(function(){

var a=1;

var b=2;

})()

a,b都是包在这个匿名函数function里的变量,作用域不再是window,而是局限在函数内部。

由于变量被各自包含在不同的匿名函数中,也就不会出现冲突了。

但是不同脚本里的变量就不能互相通信。处理方式:在window中定义一个全局变量,如下:

var str;

(function(){

var str=a=2;

})()

(function(){

alert(str);

})():

上面的例子中,使用普通的变量作为全局变量会导致扩展性差。

方法2:使用一个对象类型的变量作为全局变量。

var Globle{};

(function(){

Globle.str2=a;

Globle.str1=b;

})()

(function(){

Globle.str2=a;

Globle.str3=b;

})()

我们看到上面,虽然用一个Globle变量,但是有可能出现两个方法中都绑定同一个属性str2,导致变量被替换。

方法3:使用命名空间+对象型全局变量

在不同的命名空间下,使用相同的对象类型变量来存放全局变量

var Globle={};

(function(){

Globle.A={};

Globle.A.str=1;

})()

(funciton(){

Globle.B={};//一级命名空间     Globle.B.B={}是二级命名空间

Globle.B.str=2;

})()

方法3升级版:定义命名空间函数,在需要使用命名空间的匿名函数中调用

var Globle={};

Globle.namespace=function(str){

var arr=str.split("."),

o=Globle;

if(arr[0]="Globle") var i=1;

else  var i=0;

for(i;i<arr.length;i++){

o[ arr[i] ] = o[ arr[i] ] || {};//当o[ arr[i] ]存在时就等于o[ arr[i] ],不存在,即最后一个的时候就等于空对象{}

o=o.[ arr[i] ]

}

}

理解:

str=Globle.A.ar;
arr=[Globle,A,ar];
o=Globle;
o[A]=o[A];
o=Globle=Globle[A]=Globle.A;
Globle[A][ar]=Globle[A][ar]=Globle.A.ar;

str=A.ar;
arr=[A,ar];
o=Globle;
o[arr[0]]=o[A];o[A]=o[A];
o[ar]=o[ar];
o=Globle[A][ar]=Globle.A.ar;


在其他地方的调用:

Globe.namespace("A.str");

Globle.namespace("B.str");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值