JavaScirpt - 模块的写法

传送门

http://www.ruanyifeng.com/blog/2012/10/javascript_module.html

1. 原始写法

function f1() {
       // do sth..
}


function f2() {
    // do sth..
}

缺点:污染全局变量;可能和其他模块发生冲突;模块中的成员之间看不出关系。

2. 把模块写进去进对象里面

var module1 = new Object({
    _count : 0,

    f1 : function() {
        //..   
    },

    f2 : function() {
        //...

    }       
});

缺点:改变了模块内部状态;例如module1._count = 5。不符合“开闭原则”。

3. 改进第2: 用立即执行函数(立即执行沙盒)来写

沙盒即是隔离的环境。在JS就是(function(){})。
立即执行函数(IIFE, Immediately-Invoked Function Expression)就是沙盒()。

var module1 = (function() {
    var _count = 0;
    var f1 = function() {
        //..
    };

    var f2 = function() {
        //..
    };

    return {
        f1 : f1,
        f2 : f2
    }; 
})();

4. 放大模式(augmentation), 宽放大模(Losse augmentation),输入全部变量等看阮老师的文章(传送门)。

猜你喜欢

转载自www.cnblogs.com/allen2333/p/9238177.html