Javascript模块模式 - Javascript Module Pattern


经常发现这样一种模式, 即定义一个匿名的函数并立即执行, 然后返回一个函数. 最先是在Prototype的源码里面看到大量这种用法, 当时就不太明白这么做的道理, 最近又碰到这种形式, 所以就想到这可能是一种设计模式. 但我不知道叫什么名字, 用"javascript return function pattern" 搜了一下, 发现这就是叫做Module Pattern, 模块模式.

var init = (function () {   
  //定义一些函数或代码
  return function() {}
}());  

也有的是不加外层的括号

var init = function () {   
  //定义一些函数或代码
  return function() {}
}();  

这种模式的作用之一就是利用匿名函数的闭包来建立一种私有的作用域. 他所依赖的几个关键点是:匿名函数, 自调用, 闭包, 返回函数或对象.

几个关键概念:loose augmentation, private state, sub modules.

这种模式在YUI中也得到了大量的应用, 所以其实是一种应用广泛, 很重要的模式. 搜索"javascript 模块模式", 或者"javascript module pattern" 可以找到详细的介绍.