1、 为什么要使用模块化?

  模块化的作用有以下这些:

  • 可以解决命名冲突
  • 管理依赖
  • 提高代码的可读性
  • 代码解耦,提高代码的复用性

AMD(异步执行) 是 RequireJS 在推广过程中对模块定义的规范化产出。
CMD (同步执行)是 SeaJS 在推广过程中对模块定义的规范化产出。

这些规范的目的都是为了 JavaScript 的模块化开发,特别是在浏览器端的。
目前这些规范的实现都能达成浏览器端模块化开发的目的。

浏览器不兼容CommonJS(http://wiki.commonjs.org/wiki/Modules/1.1)的根本原因,也正是在于缺少四个Node.js环境的变量。

  • module
  • exports
  • require
  • global

2.AMD规范

AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

  AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:

  require([module], callback);

  第一个参数[module],是一个数组,里面的成员就是要加载的模块;第二个参数callback,则是加载成功之后的回调函数。

3.CMD规范

cmd的全称是Common Module Definition,即通用模块定义,其提供了模块定义和按需加载执行模块。该规范明确了模块的基本书写格式和基本的交互规则。

在 CMD 规范中,一个模块就是一个文件。代码的书写格式如下:

define(factory);

  这里的define是一个全局函数,用来定义模块,这里的factory参数既可以是函数,又可以是字符串或对象

4.两者区别

AMD 通过 require.js实现 
CMD 通过 sea.js实现

1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible.

2. CMD 推崇依赖就近,AMD 推崇依赖前置。看代码:

// CMD
define(function(require, exports, module) {
var a = require('./a')
a.doSomething()
// 此处略去 100 行
var b = require('./b') // 依赖可以就近书写
b.doSomething()
// ...
})// AMD 默认推荐的是
define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
a.doSomething()
// 此处略去 100 行
b.doSomething()
...
})

AMD(异步执行)和CMD (同步执行)之间的区别是什么?相关推荐

  1. mysql 同步复制 半同步复制_一文看懂MySQL的异步复制、全同步复制与半同步复制...

    今天主要聊一下MySQL的异步复制.全同步复制与半同步复制,目前我们生产库实际上用的就是异步复制了,后面再转成半同步复制. 一.MYSQL复制架构衍生史 在2000年,MySQL 3.23.15版本引 ...

  2. js等待异步执行完再执行,js如何让代码同步执行

    JS方法怎么同步执行 . 方法1内部用了var表示内部变量执行完一次后会自动释放:方法2内的变量cc不能与方法1重名:示例代码如下测试可以varstr='';functioncfun(obj){str ...

  3. C#:异步编程和线程的使用(.NET 4.5 ),异步方法改为同步执行

    摘自:http://www.codeproject.com/Articles/996857/Asynchronous-programming-and-Threading-in-Csharp-N(葡萄城 ...

  4. js文件引用方式及其同步执行与异步执行

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp74 任何以appendChild(scriptNode) 的方式引入的j ...

  5. 计算机中 什么是同步执行和异步执行?

    1 当您同步执行某项任务时,您将等待它完成,然后再转到另一项任务.当您异步执行某项任务时,您可以在它完成之前转移到另一个任务. 也就是说,在计算机的上下文中,这转化为在另一个"线程" ...

  6. 使用Async同步执行异步函数

    为了适应异步编程,减少回调的嵌套,我在项目中引入了Async,当批量处理且需要同步执行一些逻辑相同的异步函数时,觉得还是Async最为靠谱. 我有一个类似下面代码的场景,依据数组中的每一个元素执行一个 ...

  7. [js] promise的构造函数是同步执行还是异步执行,它的then方法呢?

    [js] promise的构造函数是同步执行还是异步执行,它的then方法呢? promise构造函数是同步执行的,then方法是异步执行的. 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很 ...

  8. JS执行机制、同步和异步、宏观任务和微观任务

    1. JS 是单线程 JavaScript 语言的一大特点就是单线程,也就是说,同一个时间只能做一件事. 这是因为 Javascript 这门脚本语言诞生的使命所致--JavaScript 是为处理页 ...

  9. js回调执行顺序,同步任务与异步任务,宏任务与微任务

    JS执行顺序 JS是单线程的,即一段时间只能执行一个任务.执行一段代码,js总是按照顺序执行的,只不过在执行的过程中不会等待异步任务. 同步任务与异步任务 同步任务:立即执行的任务,直接被主线程读取并 ...

最新文章

  1. FilterDispatcher is deprecated! Please use
  2. (转载)hive文件存储格式
  3. python更改list数据类型_python3笔记十一:python数据类型-List列表
  4. 一文理清面向对象(封装、继承、多态)+ 实战案例
  5. 子矩阵(NOIP2014 普及组第四题)
  6. Moodle: 获取老师的课程 Get Faculty Course Profiles
  7. HDFS基本原理及数据存取实战
  8. 哈夫曼树(二)之 C++详解
  9. FTP文件上传Java代码实操
  10. 前端性能优化原理与实践
  11. c语言 -- 三位数的逆序
  12. 医院科室管理系统(IDEA开发)
  13. 网页版怎么连接tcp服务器,请教怎么做一个tcp客户端访问网页
  14. 如何将修改Tomcat的默认端口(8080)到80端口
  15. 元数据管理系统的研究与实现
  16. 华科计算机组成原理 头歌Educoder Logisim 运算器设计(HUST) 1~11关满分通关
  17. IAR因版本不兼容打不开工程文件解决(Broken options、ICC8051、XLINK)
  18. 【平面设计基础】12:ACR调色
  19. PowerDesigner 大小写转换
  20. Dataset:机器学习中常用数据集下载链接集合之详细攻略

热门文章

  1. 百度超级链沙龙回顾 | IBM郭剑南:如何在区块链中使用数据库
  2. android win10 日历提醒,win10系统怎么设置日历自动提醒功能
  3. 6阶群的非平凡子群_设群G=Z 16 , 求出其全部非平凡正规子群和相应的商群._学小易找答案...
  4. 劳务报酬个人所得税JAVA计算
  5. gitlab改成中文版(汉化)
  6. C4D:如何将已经被C掉的模型等比例缩放 解决方法
  7. 我的2011--快乐最重要
  8. Python使用pyinstaller的各种坑+解决方案
  9. Ubuntu图形界面打不开解决方法
  10. 【硬件控制】1. Pico介绍