# 闭包和模块

模块模式利用了闭包。

# 例子


function foo() {
    var something = 'cool'
    var anther = [1, 2, 3];
    function doSomething() {
        console.log(something);
    }

    function doAnother() {
        console.log(anther);
    }
    return {
        doSomething,
        doAnother
    }

}

我们称它为模块,我们把 foo 赋值给一个外部变量,然后我们可以在这个 API 访问那些属性。

我们也可以直接返回一个函数。jQuery 就是一个很好地例子。 函数被调用一次,就会返回一个新的模块。

# 单例

上述模块可以被任意的调用多次,我们如果只会调用一次的话。

var foo = (function Module() {})();

# 返回公有 API

var foo = (function () {
    function change() {};
    function identify() {};
    var publicAPI = {
        change,
        identify
    }
})()

# CMD/ AMD 模块

模块依赖加载器/消息机制实际上都是将这种模块定义包装进一个友好的 API。