"AMD规范中文版"
AMD(异步模块定义)规范是一种设计模式,用于在浏览器环境中异步加载和管理JavaScript模块。这种规范解决了浏览器同步加载模块可能导致的性能问题、可用性问题、调试困难以及跨域限制。AMD规范由RequireJS提出并广泛采用,但与AMD公司的硬件产品无关。
核心API:`define()`函数
AMD规范的核心是一个全局函数`define`,它用于定义模块及其依赖。`define`函数接受三个可选参数:`id`、`dependencies`和`factory`。
1. `id`:表示模块的标识,即模块的名称。此参数是可选的,如果不提供,模块的名称将默认为加载时请求的脚本文件名。如果提供,模块名必须是全局唯一的、绝对的字符串,不支持相对路径。
2. `dependencies`:是一个数组,列出了当前模块所依赖的其他模块。这些模块将在工厂方法执行前按需异步加载,并以数组中的顺序作为参数传递给工厂方法。
3. `factory`:是处理模块逻辑的函数或对象,通常用于创建模块的实例。当所有依赖模块加载完成后,工厂方法会被调用,其结果成为定义模块的公共接口。
模块名的格式遵循特定的规则:
- 模块名由正斜杠分隔的单词组成,单词可以是驼峰式或点号分隔的。
- 不包含文件扩展名,如.js。
- 模块名可以是相对的或顶级的。相对模块名以"."或".."开头,顶级模块名从根命名空间解析,而相对模块名解析为相对于当前模块的位置。
相对模块名解析示例:
- 如果模块"a/b/c"请求"../d",则解析为"a/d"。
- 如果模块"a/b/c"请求"./e",则解析为"a/b/e"。
关于Loader-Plugins(加载器插件):
AMD规范还支持加载器插件,它们允许扩展模块加载机制以处理非JavaScript资源,如CSS、图片等。插件模块名以"!"字符分隔,前半部分是插件名,后半部分是插件资源名,资源名可以非常灵活,大多数字符都是允许的。
特殊依赖:
AMD规范定义了三个特殊的依赖关键字:"require"、"exports"和"module"。这些关键字在模块内部可以被引用,分别代表以下含义:
- `require`:提供一个函数,用于动态加载其他模块。
- `exports`:对象,用于导出当前模块的公共接口。
- `module`:对象,包含了当前模块的信息,如`module.id`是模块的标识,`module.exports`用于设置模块的输出。
通过AMD规范,开发者可以构建复杂的、模块化的JavaScript应用,实现代码的解耦和复用,同时利用浏览器的异步加载能力提高页面性能。在实际开发中,通常结合模块加载器如RequireJS来实现AMD规范的落地。