avatar

不觉南风

不觉南风的个人博客

  • 首页
  • 文章
  • 标签
  • 项目&效果展示
  • 关于
Home AMD规范
文章

AMD规范

Posted 2024-03-9 Updated 2024-03- 9
By 不觉南风
8~10 min read

什么是AMD规范

AMD(Asynchronous Module Definition),也就是异步模块定义。AMD规范,制定了定义模块的规则,使得模块之间的依赖可以被异步加载。这和浏览器的异步加载模块的环境刚好适应(浏览器同步加载模块会导致性能、可用性、调试和跨域访问等问题)。

所谓异步,就是所有的模块将被异步加载,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。这就是浏览器端模块加载器核心所在。

实际上AMD 是 RequireJS 在推广过程中对模块定义的规范化的产出

define方法:定义模块

AMD规范定义了一个自由变量或者说是全局变量 define 的函数,其作用是用来定义并暴露一个模块,函数代码如下:

define(id?, dependencies?, factory);

l  第一个参数,id(名字),是个字符串。它指的是定义中模块的名字,这个参数是可选的。如果没有提供该参数,模块的名字应该默认为模块加载器请求的指定脚本的名字。如果提供了该参数,模块名必须是“顶级”的和绝对的(不允许相对名字)。

l  第二个参数,dependencies(依赖),是个定义中模块所依赖模块的数组。依赖模块必须根据模块的工厂方法优先级执行,并且执行的结果应该按照依赖数组中的位置顺序以参数的形式传入(定义中模块的)工厂方法中。

l  第三个参数,factory(工厂方法),为模块初始化要执行的函数或对象。如果为函数,它应该只被执行一次。如果是对象,此对象应该为模块的输出值。

RequireJS的基础使用

index.html

// 首先引入require.js, 自定义属性data-main为总入口文件的路径
<script data-main="./js/index.js" src="./js/require.js"></script>

主入口文件 index.js

// index.js 以下两种方式都可以达到引入a.js和b.js的目的
// 方式一
define(["b", "a"], function (b, a) {
    //等b.js加载完成后运行该函数
    //模块内部的代码
    console.log(b, a)
})
// 方式二:类似commonJs的书写方式
define((require, exports, module) => {
    var a = require("a"),
        b = require("b");
    console.log(b, a)
})

模块1 a.js

// 这里引入了b模块并导出a模块的内容
define(["b"], function(b){
    console.log("a模块的内部代码")
    return "a模块的内容";
})

模块2 b.js

// 这里导出了模块b的内容
define(function () {
    //模块内部的代码
    console.log("b模块的内部代码")
    var a = 1;
    var b = 234;
    return {
        name: "b模块",
        data: "b模块的数据"
    }
})
编程随记
javaScript基础
License:  CC BY 4.0
Share

Further Reading

Mar 21, 2024

vue项目中利用scss进行全局字体放大

新公司需要上架浙里办政府服务网的PC端,在审核的时候被老龄化适配打回来了。需要做全局的字体放大,在网上查了一些博客,最后结合自

Mar 9, 2024

AMD规范

什么是AMD规范 AMD(Asynchronous Module Definition),也就是异步模块定义。AMD规范,制定了定义模块的规则,使得模块之间的依赖可以被异步加载。这和浏览器的异步加载模块的环境刚好适应(浏览器同步加载模块会导致性能、可用性、调试和跨域访问等问题)。 所谓异步,就是所有

Mar 9, 2024

http缓存机制

缓存的基本原理 在一个C/S结构中,最基本的缓存分为两种: 客户端缓存 服务器缓存 本文仅讨论客户端缓存

OLDER

http缓存机制

NEWER

vue项目中利用scss进行全局字体放大

Recently Updated

  • vue项目中利用scss进行全局字体放大
  • AMD规范
  • http缓存机制
  • git提交报错 husky - commit-msg hook exited with code 1 (error)
  • for...in 和 for...of有什么区别?

Trending Tags

电脑常见问题 nodejs vuejs webpack 网络 问题记录 javaScript基础 小程序 常用插件 数据库

Contents

©2025 不觉南风. Some rights reserved.

Using the Halo theme Chirpy