AMD(异步模块定义),规范提供了定义模块,异步加载模块的依赖的机制。
规范只定义了一个函数“define”,它是全局变量。函数的描述为:
define(id?, dependencies?, factory);
第一个参数,id,是个字符串,指的是定义模块的名字,是可选的。
模块名规范
模块名是用正斜杠分割的有意义单词的字符串
单词须为驼峰形式,或者“.","..“
模块名不允许文件扩展名的形式,如".js"
模块名可以为”相对的“或”顶级的“。如果首字符为”."或".."则为相对的模块名
顶级的模块名从根命名空间的概念模块解析
相对的模块名从“require"书写和调用的模块解析
如果Loader-Plugins被AMD规范的实现所支持,那么”!"用来分开加载器插件的模块名和插件的资源名。因为插件的资源名是非常自由的,资源名应该允许大多的字符。
第二个参数,dependencies,依赖,是定义模块所依赖模块的数组。依赖模块必须根据模块的工厂方法优先级执行,并且执行的结果应该按照依赖数组中的位置顺序以参数的形式传入(定义中模块的)工厂方法中。
依赖的模块名如果是相对的,应该解析为相对定义中的模块。
规范定义了三种特殊的依赖关键字,如果”require“,”exports“或”module“出现在依赖列表中,参数应该按照CommonJS模块规范自由变量去解析。
依赖参数是可选的,如果忽略此参数,它应该默认为["require”, "exports", "module"]。然而,如果工厂方法的长度属性小于3,加载器会选择以函数的长度属性定义的参数个数调用工厂方法。
第三个参数,factory,工厂方法,为模块初始化要执行的函数或对象。如果为函数,它应该只被执行一次。如果是对象,此对象应该为模块的输出值。
如果工厂方法返回一个值(对象,函数,或任意强制类型转换为true的值),应该为设置为模块的输出值。