浅谈amd与cmd的作用与区别

yizhihongxing

浅谈AMD与CMD的作用与区别

1. AMD和CMD的概述

AMD和CMD都是JavaScript的模块加载器。在ES6出现之前,JavaScript是没有官方的模块化标准的,但由于JavaScript已经成为应用非常广泛的语言,因此有人在此基础上对它进行了扩展,对于在此时期的JavaScript开发者来说,AMD和CMD就是他们首选的模块加载器之一。

AMD (Asynchronous Module Definition) 异步模块定义,主要应用于浏览器中,它提前加载依赖的模块,但是不执行,等到依赖的模块都加载完成后,按照依赖顺序执行模块。

CMD(Common Module Definition) 通用模块定义,同样适用于浏览器和Node环境下,与AMD不同的是,它推崇的是依赖就近,需要用到某个模块时再去加载它。

2. AMD和CMD的区别

AMD和CMD的最大的区别就是对于依赖模块的处理方式不同。AMD会提前加载依赖模块,然后在代码运行的过程中需要用到某个模块时再去执行,而CMD则是当代码需要加载某个模块时再去加载依赖模块,它的依赖模块加载方式类似CommonJS。

除此之外,还有一些其他的细微差别。比如AMD需要通过define来定义模块,而CMD则是通过exports来导出模块;AMD的模块返回值可以是任何值,而CMD则只能是对象;AMD的依赖模块定义中的路径必须指定,而CMD则可以不指定默认加载与当前模块同一目录下的同名文件。

3. AMD和CMD的示例说明

3.1 AMD示例说明

define(['module1', 'module2'], function(m1, m2){
  function doSomething(){
    m1.doSomeFunction();
    m2.doAnotherFunction();
  }
  return {
    doSomething: doSomething
  }
});

以上代码定义了一个名为doSomething的函数。它依赖于module1和module2两个模块。只有这两个模块都加载完成之后,就会按照依赖顺序执行这个函数。

3.2 CMD示例说明

define(function(require, exports, module) {
  var m1 = require('module1');
  var m2 = require('module2');

  function doSomething() {
    m1.doSomeFunction();
    m2.doAnotherFunction();
  }
  exports.doSomething = doSomething;
});

以上代码与前面的AMD示例非常相似,但是它使用的是CMD。在这里,我们通过require来引入模块,然后再导出函数。需要用到某个模块时再去加载它,这也是CMD最大的特点之一。

总结

AMD和CMD都是目前前端工程化开发中非常常用的模块加载器,它们的存在让开发者可以使用模块化的思想组织代码,从而更加容易维护和扩展。此外,AMD和CMD虽然有一些区别,但是它们都能满足我们大部分的模块化开发需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈amd与cmd的作用与区别 - Python技术站

(0)
上一篇 2023年3月31日
下一篇 2023年4月16日

相关文章

  • centos7.0安装

    CentOS 7.0 安装教程 CentOS是一个从Red Hat Enterprise Linux(RHEL)编译而来的开源操作系统,具有更长的支持周期、更大的软件仓库和更好的稳定性。本篇文章将为大家提供CentOS 7.0的安装教程。 下载CentOS 7.0镜像 首先,我们需要从官网下载CentOS 7.0的镜像文件。可以从如下链接下载最新的CentO…

    其他 2023年3月28日
    00
  • Android数据双向绑定原理实现和应用场景

    Android数据双向绑定原理实现和应用场景攻略 1. 什么是Android数据双向绑定 Android数据双向绑定是一种机制,它允许数据模型和用户界面之间的自动同步。当数据模型发生变化时,界面会自动更新;反之,当用户在界面上进行操作时,数据模型也会相应地更新。 2. 实现Android数据双向绑定的原理 实现Android数据双向绑定的原理主要涉及以下几个…

    other 2023年9月6日
    00
  • 五个经典链表OJ题带你进阶C++链表篇

    五个经典链表OJ题带你进阶C++链表篇 前言 链表作为一种非常重要的数据结构,常常用来解决一些实际问题。在代码中,我们需要用到链表时,不能只是会使用,而是要掌握它的一些经典问题,才能真正了解链表的一些相关性质和应用。本篇攻略介绍了五个经典的链表OJ题,通过解析这些问题,帮助初学者进阶学习C++链表。 问题一:求链表的长度 输入一个单链表,输出链表的长度。 算…

    other 2023年6月27日
    00
  • 冲破百度网盘屏蔽迅雷屏蔽!教你如何离线观看你的BT种子

    冲破百度网盘屏蔽迅雷屏蔽!教你如何离线观看你的BT种子 前言 从2017年起,百度网盘开始屏蔽迅雷下载,此后陆续有其他下载软件被屏蔽。针对此问题,本文提供了一种方法,让你能够用自己的下载工具离线下载并观看BT种子。 简介及需求 本方法主要是通过将BT资源上传至离线下载网站,再通过离线下载网站提供的下载链接进行下载。因此,需要如下条件: 稳定的网络连接 P2P…

    other 2023年6月26日
    00
  • IIS 7.5 HTTP 错误 404.3 – Not Found错误的解决方法

    IIS 7.5 HTTP 错误 404.3 – Not Found 错误的解决方法 当在使用IIS 7.5作为Web服务器时,您可能会遇到HTTP错误404.3 – Not Found错误。这个错误通常表示IIS无法为请求提供所需的MIME类型的映射。以下是解决这个问题的完整攻略: 步骤1:检查IIS配置 首先,您需要检查IIS的配置,确保它已正确设置以处理…

    other 2023年8月5日
    00
  • JSON 数字排序多字段排序介绍

    JSON 数字排序多字段排序介绍 简介 JSON是一种基于键值对的轻量级数据交换格式,常用于前后端数据传输。在实际应用中,我们经常需要对JSON数据进行排序,例如对用户信息按照年龄和姓名进行排序,这时就需要使用多字段排序。 数字排序 升序和降序 对于仅包含数字的JSON数据,我们可以使用JavaScript内置的sort()方法进行排序。sort()的默认顺…

    other 2023年6月25日
    00
  • 在centos docker中安装nvidia驱动

    在CentOS Docker中安装NVIDIA驱动 NVIDIA驱动是在使用NVIDIA显卡时必不可少的组件。在CentOS Docker中安装NVIDIA驱动需要一定的技巧和方法。本文将会介绍一种较为通用的安装NVIDIA驱动的方法。 前置条件 在开始安装NVIDIA驱动之前,我们需要确认以下几点: 确认NVIDIA的显卡已经正确安装并连接。 确认正在使用…

    其他 2023年3月28日
    00
  • 关于java:如何通过构造初始化hashset值?

    以下是关于“如何通过构造初始化HashSet值”的完整攻略,包含两个示例。 如何通过构造初始化HashSet值? HashSet是Java中的一种集合类型,可以存储不重复的元素。我们可以使用构造函数来初始化HashSet的值。以下是两种常用初始化HashSet值的方法: 方法1:使用Arrays.asList()方法 我们可以使用Arrays.asList(…

    other 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部