js代码越来越多,越来越臃肿,合作开发的时候经常出现全局变量冲突等等,遇到这些问题的时候应该考虑js的模块开发了,下面简单介绍一下所谓模块开发的基础。
1、说到模块开发就不得不提立即执行函数,什么是立即执行函数呢,请看下面的示例:
/** * 立即执行函数常用有两种方式调用 * (function(){}()); * (function(){})(); */ (function() { alert(1); })();
2、这有什么好处呢,当然就是防止全局污染了,也就是函数里面声明的变量不会被外部访问,例如:
var module = (function() { var module = {}; //私有属性 var user = '村长'; function _private() { alert('私有方法'); //私有方法 } module.name = user+'123'; module.pubFn = function() { _private(); return '公共方法'; }; return module; }()); alert(module.user); //undefined alert(module.name); //村长123 alert(module.pubFn()); //私有方法、公共方法
3、如何导入全局变量呢,这个有办法,请看:
var module = (function($) { $.id = 1; }(window)); alert(id); //1
4、扩展模块
var module = (function($) { $.extend = function() { alert('extend'); } return $; }(module || {})); //松散扩展,及时之前没有声明module,也会把'{}'当作对象传进去 module.extend(); //extend
5、防止模块覆盖
(function($) { $.extend = function() { alert('extend'); } }(window.module = window.module || {}));
6、子模块
var module = (function($) { $.extend = function() { alert('extend'); } return $; }(module || {})); //子模块 module.child = (function() { var c = {}; c.name = '村长'; c.fn = function() { console.log(this.name); } return c; })(); module.child.fn();