AMD(Asynchronous Module Definition):异步模块定义,采用异步方式加载模块。
// 定义模块 define("Module", [], function() { var Module = function() { // Module 相关实现代码 }; return Module; }); // 引用模块 require([Module], function(Module){ // 相关处理代码 });
AMD通过define()函数来定义模块:
如果需要参照某个外部模块导出的对象,需要事先引用该外部模块。
AMD的主要特点:
定义模块时,define函数被执行,解析器会用一些预定义的规则解析所有依赖模块的路径,并且把未载入也未进入等待列表的依赖放入等待列表,并加载这些依赖所对应的文件。当所有依赖被加载完后,才会执行定义时所设置的factory,并把factory的返回值存储在内部的哈希表里,而存储的键为定义时设置的id,没有有设置id的情况下,默认为该模块的模块名称(path/ModuleName)。
引用模块时,解析器会遍历所设置的依赖数组,以数组的成员(字符串)为键,从内部哈希表中查找到对应的值,赋值给回调函数中对应位置的参数。