高级任务四

题目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推广中产出

你可能感兴趣的:(高级任务四)