在我们平时的项目中,特别是模块化开发中。经常会遇到一些js冲突问题,特别是当项目复杂到一定程度的时候。比如项目中引入了相当多的类库,框架以后。
那么。我们如何去避免或者解决这类问题呢?
1、避免使用全局变量。
2、使用匿名函数的方法来把自己的模块包起来。这样你所定义的变量 就只能在这个匿名函数中使用了。
如果存在模块之间的通信怎么办呢?我们可以适量的使用全局
例如:
var win={};//全局对象
(function(){//匿名函数A
win.str1="aaa";
})();
(function(){//匿名函数B
console.log(win.str1);
})();
这样你就可以在函数B中使用函数A中的变量。但是会存在一个问题。就是,B中如果有一个变量跟A中的命名一样,那就会产生覆盖。
这样就用到了一个叫命名空间的概念!
命名的时候加上一个前缀。window下的全局变量.命名空间.变量名
var win;
win={}; //一级命名
win.A = {}; //二级命名
(function(){
win.A.str1="qqq";})();
win.B={};
(function(){
console.log(win.A.str1);
win.B.str1="aaa";
console.log(win.B.str1);
})();
这是一种解决问题的办法吧,如有大神看到。忘指点!