浅谈amd与cmd的作用与区别

浅谈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日

相关文章

  • JVM类加载机制详解

    JVM类加载机制详解 JVM类加载机制是Java虚拟机的核心功能之一,负责将Java类文件加载到内存中,并执行Java程序。在本篇攻略中,我们将深入了解JVM类加载机制的原理、加载过程以及类加载器的种类。 一、JVM类加载机制的原理 JVM类加载机制的基本原理是将以.class文件形式存储的Java字节码文件读取到内存中,并解析成JVM能够使用的数据结构,并…

    other 2023年6月25日
    00
  • python __init__与 __new__的区别

    Python __init__与__new__的区别 __init__和__new__都是Python中的特殊方法,用于对象的初始化和创建。它们在对象的生命周期中扮演不同的角色。 __new__方法 __new__是一个静态方法,用于创建对象实例。 __new__方法在对象创建之前被调用,它负责创建并返回一个新的对象实例。 __new__方法的第一个参数是类…

    other 2023年10月16日
    00
  • linux删除环境变量步骤详解

    让我来详细讲解一下“Linux删除环境变量步骤详解”的完整攻略。 1. 查看环境变量 在删除环境变量之前,我们需要先查看当前系统的环境变量,可以使用echo命令输出$PATH环境变量的值。 echo $PATH 2. 编辑profile文件 如果要删除全局环境变量,我们需要编辑/etc/profile文件,输入以下命令打开该文件: sudo vim /etc…

    other 2023年6月27日
    00
  • 解决docker run后容器出现Exited (0)情况的问题

    针对“解决docker run后容器出现Exited (0)情况的问题”,我们可以从以下方面进行攻略。 1. 查看容器状态与日志 在查找问题时,首先要查看运行状态以及日志信息,可以使用以下命令查看容器状态: docker ps -a 该命令会列出所有的容器信息,包括容器运行状态、容器名称、容器ID等等。查找到你要查看的容器ID后,可以使用以下命令查看容器日志…

    other 2023年6月27日
    00
  • iOS Xcode创建文件时自动生成的注释方法

    当在iOS的Xcode中创建新文件时,通常会自动为你生成一些注释方法。这些注释方法可以提供大致的信息,帮助你更好地组织和理解代码。下面是一个详细的攻略,解释了如何使用Xcode创建文件时自动生成的注释方法。 打开Xcode并创建一个新的Swift或Objective-C文件。 选择要创建的文件类型,例如Swift文件或Objective-C类文件。 选择保存…

    other 2023年6月28日
    00
  • Java Resource路径整理总结

    当我们开发Java应用程序时,往往需要读取外部资源文件,如配置文件、图片资源等,那么这些资源文件应该存储在哪里呢?本文将对Java资源路径做一个深入的解释和总结。 一、绝对路径和相对路径 在谈论资源路径之前,需要先介绍一下绝对路径和相对路径的概念。绝对路径是由根目录开始的完整路径,在Windows系统中,绝对路径以盘符的形式表示,例如:C:\myfolder…

    other 2023年6月27日
    00
  • Go gRPC服务端流式RPC教程示例

    Go gRPC是一个高效的RPC框架,支持服务端和客户端流式RPC。在本教程中,我们将演示如何使用Go gRPC实现服务端流式RPC。 1. 安装Go和gRPC 首先,我们需要安装Go和gRPC。你需要按照以下步骤执行: 下载并安装Go,可以从官网 https://golang.org/ 下载安装包进行安装 下载并安装gRPC的protobuf代码生成器。可…

    other 2023年6月27日
    00
  • 一篇文章带你了解Java泛型的super和extends

    一、Java泛型的super和extends Java泛型中的extends和super是两个非常重要的关键字,它们可以用来限定泛型的类型范围。一个类型可以使用extends关键字限制范围上界,使用super关键字限制范围下界。 上界使用extends关键字来表示,它的作用是限定参数的类型只能是继承自某个类的子类或某个实现了某个接口的实现类。下界使用supe…

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