Module模式使用闭包封装‘私有’状态和组织。它提供了一种包装混合公有/私有方法和变量的方式 ,防止其泄露至全局作用域。这样为我们提供了一个屏蔽处理底层事件逻辑的整洁解决方案,同时只暴漏一个接口供应用程序的其他部分使用。请看下面这个例子:
var testModule = (function () { var count = 0; return { incremCount:function () { return ++count; }, resetCount: function (){ console.log('count value prior to reset:'+count); count = 0; } }; })();
testMoudle.incremCount();
增加数量;
testMoudle.resetCount();
输出:1;
上面的代码中incremCount()和reseCount()是无法直接读取的,count变量是完全与全局作用域隔离的,所以它就被当作一个私有变量,而能够访问的作用域的代码是这两个函数。
看下一个例子:
var mySpace = (function () { //私有变量 var myCount = 0; //私有函数 var myPrivate = function (foo) { consloe.log(foo); }; return{ //公有变量 myPublicCount:'foo', //调用私有变量和方法的公有函数 myPublicFunction:function (bar) { //增加计数 myCount++; //传入bar调用私有方法 myPrivate(bar); } }; })();
这是一个包含命名空间,公有和私有变量 的module模式。