模块化简介第一章

需要模块管理的原因就是JavaScript发展的越来越快,超过了它产生时候的自我定位。由于没有模块管理的概念,在做大型项目或者文件组织的时候,就会异常纠结。所以才会产生出这么多的模块管理工具。模块化的主要特征是:

  • 模块化,可重用
  • 封装了变量和function,和全局的namaspace不接触,松耦合
  • 只暴露可用public的方法,其它私有方法全部隐藏

实现方式

初级阶段,代码中充斥的是各种函数,通过名称区分:
function func1() {}

  function func2() {}

实际上这些函数都被挂载到了全局变量下,使用的时候可以直接调用,缺点就是: "污染"了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系。

对象写法

解决上述污染问题,可以把模块写成一个对象,所有的模块成员都放到这个对象里面。

var module1 = new Object({
    _count: 0,
    m1: function() {
        //...
    },
    m2: function() {
        //...
    }
  });
  // 等价于
  var module2 = {
    _count: 0,
    m1: function() {
        //...
    },
    m2: function() {
        //...
    }
  }

外部可以通过定义的变量名访问,起到了一点点的命名空间作用,但是同样缺点明显: 会暴露所有模块成员,内部状态可以被外部改写。比如,外部代码可以直接改变内_count的值。

立刻执行函数(Immediately-Invoked Function Expression,IIFE) or 匿名闭包

如果你不需要传参数或者没有一些特殊苛刻的要求的,可以使用立刻执行函数,该实例在内存中只会存在一份copy。

    var module1 = (function() {    
    var _count = 0;    
    var m1 = function() {       //...
            };    
    var m2 = function() {       //...
            };    
    return {      
        m1: m1,
              m2: m2    
    };  
})();

这样可以很好的保护私有变量,通过return来设置公开的方法。缺点也有: 动态添加方法的时候比较麻烦,且无法修改内部私有变量 .

                    未完...

你可能感兴趣的:(模块化简介第一章)