博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端模块化详解
阅读量:7000 次
发布时间:2019-06-27

本文共 2200 字,大约阅读时间需要 7 分钟。

本文只是适合小白学习,出自:http://web.jobbole.com/95559/

模块化的理解

1.什么是模块?

  • 将一个复杂的程序依据一定的规则(规范)封装成几个块(文件), 并进行组合在一起
  • 块的内部数据与实现是私有的, 只是向外部暴露一些接口(方法)与外部其它模块通信

 

2.模块化的进化过程

 

  • 全局function模式 : 将不同的功能封装成不同的全局函数
    • 编码: 将不同的功能封装成不同的全局函数
    • 问题: 污染全局命名空间, 容易引起命名冲突或数据不安全,而且模块成员之间看不出直接关系

 

function m1() {    // body...}function m2() {    // body...} //这样做会造成命名冲突,污染命名空间。

 

  namespace模式 : 简单对象封装

  • 作用: 减少了全局变量,解决命名冲突
  • 问题: 数据不安全(外部可以直接修改模块内部的数据)
let myModule = {  data: 'www.baidu.com',  foo() {    console.log(`foo() ${
this.data}`) }, bar() { console.log(`bar() ${
this.data}`) }}myModule.data = 'other data' //能直接修改模块内部的数据myModule.foo() // foo() other data

这样的写法会暴露所有模块成员,内部状态可以被外部改写。

IIFE模式:匿名函数自调用(闭包)

  • 作用: 数据是私有的, 外部只能通过暴露的方法操作
  • 编码: 将数据和行为封装到一个函数内部, 通过给window添加属性来向外暴露接口
// module.js文件(function(window) {  let data = 'www.baidu.com'  //操作数据的函数  function foo() {    //用于暴露有函数    console.log(`foo() ${data}`)  }  function bar() {    //用于暴露有函数    console.log(`bar() ${data}`)    otherFun() //内部调用  }  function otherFun() {    //内部私有的函数    console.log('otherFun()')  }  //暴露行为  window.myModule = { foo, bar } //ES6写法})(window)
// index.html文件

结果:

因为只是在自调用函数的内部,没有暴露的属性或方法在外部就无法访问

(我想问一下bar函数中的otherFun怎么也执行了,不是没向外暴露吗,??)

我想我知道了,暴露了bar函数,就进入到bar函数的内部,在函数内部,function声明函数提前,在bar内部可以直接访问,真是牛逼!

问题: 如果当前这个模块依赖另一个模块怎么办?

  • IIFE模式增强 : 引入依赖

          这就是现代模块实现的基石

// module.js文件(function(window, $) {  let data = 'www.baidu.com'  //操作数据的函数  function foo() {    //用于暴露有函数    console.log(`foo() ${data}`)    $('body').css('background', 'red')  }  function bar() {    //用于暴露有函数    console.log(`bar() ${data}`)    otherFun() //内部调用  }  function otherFun() {    //内部私有的函数    console.log('otherFun()')  }  //暴露行为  window.myModule = { foo, bar }})(window, jQuery)
// index.html文件  

上例子通过jquery方法将页面的背景颜色改成红色,所以必须先引入jQuery库,就把这个库当作参数传入。

这样做除了保证模块的独立性,还使得模块之间的依赖关系变得明显

3. 模块化的好处

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

4. 引入多个<script>后出现出现问题

  • 请求过多

首先我们要依赖多个模块,那样就会发送多个请求,导致请求过多

  • 依赖模糊

我们不知道他们的具体依赖关系是什么,也就是说很容易因为不了解他们之间的依赖关系导致加载先后顺序出错。

  • 难以维护

以上两种原因就导致了很难维护,很可能出现牵一发而动全身的情况导致项目出现严重的问题。

模块化固然有多个好处,然而一个页面需要引入多个js文件,就会出现以上这些问题。而这些问题可以通过模块化规范来解决,下面介绍开发中最流行的commonjs, AMD, ES6, CMD规范。

原谅我是从别人哪里粘过来的,不过很有用

转载于:https://www.cnblogs.com/xufeng1994/p/10399768.html

你可能感兴趣的文章
SpringMVC(转)
查看>>
__tostring用法,__call处理调用,__clone克隆对象
查看>>
PHP读取文件
查看>>
免费的区块链学习资料
查看>>
ILSVRC
查看>>
matlab超限像素平滑法_脉冲伏安法理论基础
查看>>
arduino 串口读取字符串_Arduino传感器教程 第24章NRF24L01 控制电舵机
查看>>
状态码202_HTTP状态码(HTTP Status Code)
查看>>
sharepoint 2010 网站集定期备份
查看>>
管理SCCM/MDT中的驱动分类
查看>>
java之HashTable
查看>>
Windows Server 2012体验之配置存储池
查看>>
轻松上手移动互联——百度SiteApp建造日志
查看>>
我从跑步中领悟到了什么?
查看>>
你的权限等于你的可见度
查看>>
Gartner:威胁情报的定义
查看>>
redis多实例重启脚本
查看>>
开发人员学Linux(4):使用JMeter对网站和数据库进行压力测试
查看>>
在51系列中data,idata,xdata,pdata的区别
查看>>
【Deeplearning】关注书目
查看>>