美文网首页
简单讲解《前端模块化》(一)

简单讲解《前端模块化》(一)

作者: yoolika | 来源:发表于2019-01-15 10:31 被阅读0次

    一.什么是模块?

    将一个复杂的程序序依据一定的规则(规范)封装成几个块(文件),并进行组合在一起

    内部数据与实现是私有的,
    只是向外部暴露一些接口(方法)与外部其它模块通信

    二.模块化的进化过程(本次课的重点)

    1. 全局function模式:就是把不同的功能封装成不同的全局函数,

    function m1(){
      //...
    }
    function m2(){
      //...
    }
    

    2. 命名空间的模式:基于简单的对象的封装

    问题: 数据不安全(外部可以直接修改模块内部的数据)
    所有模块成员,都会直接暴露在外

    let objFn = {
        data:'xxx123',
        afn(){
            console.log( this.data )
        },
        bfn(){
            console.log( this.data )
        }
    }
    objFn.data = 'aaabbb';
    objFn.afn();
    

    3. IIFE,也就是匿名函数自执行的方式(闭包)

    向window对象上添加全局属性,也有的把这种方法叫做添加命名空间
    目的都是向外暴露接口

    其实这种方式很好,方法是私有的,只能通过外部接口来操作;
    但是问题是,如果多个模块之间有相互的依赖关系,就不好办了。

    <script type="text/javascript">
    ;
    (function(win){
        function aFn(){
        // ....
        }
    
        function bFn(){
                // ....
        }
    
        // 向外暴露方法,es6的写法
        win.myMethod  = { aFn, bFn }
    })(window)
    </script>
    

    4. IIFE的模式增强:向入口中传入依赖的模块

    <!-- 假设依赖的是jq -->
    <script type="text/javascript">
    ;
    (function(win, $){
        function aFn(){
            $(body).css(....)
        }
    
        function bFn(){
                // ....
        }
    
        // 向外暴露方法,es6的写法
        win.myMethod  = { aFn, bFn }
    })(window, jQuery);
    </script>
    

    // 这种方式的问题就是,引入的js文件、模块,
    // 必须要有一定的先后顺序,否则会报错,报各种undefined

    三. 模块化的好处

    在面试的时候,背下来就好了

    • 避免命名冲突(减少命名空间污染)
    • 更好的分离, 按需加载
    • 更高复用性、高可维护性

    四. 引入多个 script 后出现出现问题

    引入 多个 script之后,会不可避免的出现 引用的交叉。

    • 请求过多;

    • 依赖会乱掉,就所谓的依赖模糊

    • 难以维护,因为各种调用、依赖都交织在一起了。

    这就导致真正意义上的模块化的出现,
    也就是后来的 common.js ,AMD, es6 ,CMD这些。

    转自 WEB前端教室

    相关文章

      网友评论

          本文标题:简单讲解《前端模块化》(一)

          本文链接:https://www.haomeiwen.com/subject/wxuedqtx.html