一、模块化的由来
1、最早我们这么写代码
全部方法写在一起,容易命名冲突,并且污染global全局
function foo(){}function bar(){}
2、简单封装(Namespace模式)
减少了全局的变量,但是仍然可以通过myFunc.foo去操作数据,不安全
var myFunc = { _private:'no safe', foo: function(){ console.log(this._private) }}myFunc._private = 5;myFunc.foo();
3、匿名闭包(IIFE模式)
函数时javascript中唯一的localScope, 无法操作里面的数据
var module = (function(){ var _private = 'safe now'; var foo = function(){ console.log(_private); } return { foo:foo }})();或者(function(){ var _private = 'safe now'; var foo = function(){ console.log(_private); } window.module = { foo:foo }})()module._private; // undefined module.foo();
4、增强,引入依赖
有时候,我们的功能需要依赖模块才能完成,此时需要蒋模块注入进来
// 这就是模块模式的基础var module = (function($){ var _private = $('body'); var foo = function(){ console.log(_private); } return { foo:foo }})(JQuery);或者(function(global){ var _private = 'safe'; var foo = function(){ console.log(_private); } global.module = { foo:foo }})(window)module.foo();