高级任务四

题目1: 为什么要使用模块化?

  • 最主要目的
  1. 解决命名冲突
  2. 依赖管理
  • 其他价值
  1. 提高代码可读性
  2. 代码解耦,提高复用性

题目2: CMD、AMD、CommonJS 规范分别指什么?有哪些应用

  • CommonJS 规范
  1. 定义模块: 根据CommonJs规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性

  2. 模块输出: 模块只有一个出口, module.exports 对象,我们需要把模块希望输出的内容放入该对象

3.加载模块:加载模块使用require 方法,该方法读取一个文件执行,返回文件内部的 module.exports 对象

//定义模块 a.js
var people = {
    name: 'ruoyu',
    sayName: function(){
        console.log(this.name);
    }
}

module.exports = people;

//加载模块 b.js
var p = require('./a');
p.sayName();

  • AMD 规范

AMD 是 “Asynchronous Module Definition” 的缩写,意思就是“异步模块定义”。是 RequireJS 在推广过程中的规范化产出。该规范定义了一个函数define,它是全局变量。

requireJS主要解决两个问题

  1. 多个js文件可能有依赖关系,被依赖的文件需要早于依赖它的文件加载到浏览器
  2. js加载的时候浏览器会停止页面渲染,加载文件越多,页面失去响应时间越长
// 定义模块 myModule.js
define(['dependency'], function(){
    var name = 'Byron';
    function printName(){
        console.log(name);
    }

    return {
        printName: printName
    };
});

// 加载模块
require(['myModule'], function (my){
  my.printName(); 
});
  • CMD 规范

CMD 是 SeaJS 在推广过程中的规范化产出。

与 AMD 的区别:

  1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。
  2. CMD 推崇依赖就近,AMD 推崇依赖前置
define(function(require, exports, module) {   
  var a = require('./a')   
  a.doSomething()   
  // 此处略去 100 行   

  var b = require('./b') 
  // 依赖可以就近书写   
  b.doSomething()   
  // ... 
})

  • 应用
  1. CommonJS 适用于服务器端,基于Node,可用于Glup、Webpack之类的打包压缩再用于浏览器环境

  2. AMD 用于浏览器环境, 如RequireJS

3.CMD 用于浏览器环境, SeaJS推广中产出

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 随着前端业务复杂度的增加,模块化成为一个大的趋势。而在ES6还未被浏览器所支持的情况下,commonjs作为ES6...
    吴高亮阅读 1,068评论 0 3
  • 模块通常是指编程语言所提供的代码组织机制,利用此机制可将程序拆解为独立且通用的代码单元。所谓模块化主要是解决代码分...
    MapleLeafFall阅读 1,207评论 0 0
  • 以代码爱好者角度来看AMD与CMD 随着浏览器功能越来越完善,前端已经不仅仅是切图做网站,前端在某些方面已经媲美桌...
    鄙人才疏学浅阅读 1,832评论 2 7
  • 1 个人理解;有错希望大家指出;稍后更新拖拽上传文件; 2、commonJS commonjs的目标是制定一个js...
    吴高亮阅读 1,592评论 0 2
  • 我从冬天里走来 种下一千种见你的理由 一千种理由都在二月开出鸣黄的小花 她们各自开放,夸张又怪诞 你那边还是冬天 ...
    轶之小义子阅读 554评论 9 8