Copyright (C) 2013-2017 fmdjs.org
Licensed under the MIT.

定义模块 define a module

fmd.js采用类似AMD和CommonJS的方式来定义模块,define是全局函数,基本语法如下:

define( id?, dependencies?, factory );

id,模块标识符,用来唯一标识所定义模块,只能是字符串

dependencies,模块依赖,只能是数组,且其每一项均是所依赖模块的id

factory,模块构造方法,可以是函数、对象、数组

define( id, dependencies, factory )

这是最常规的用法。当模块存在id时,则此模块为具名模块

define( 'case/a', ['case/b','case/c'], function( b, c ){
    //todo sth
} );

此场景下,称模块case/a依赖/引用模块case/b、模块case/c,模块case/b被模块case/a依赖/引用。此时,factory为函数,执行后,将得到该模块输出的接口,执行时,将会依次传入dependencies中各个id所标识的模块所输出的接口。即,b代表模块case/b输出的接口,c代表模块case/c输出的接口

具名模块只有在第一次其他模块依赖时才会执行factory并且输出接口,之后再被依赖,将直接输出接口

define( id, factory )

当模块没有任何依赖的模块,可将dependencies参数省去

define( 'case/b', function(){
    //todo sth
} );

define( id, factory<object/array> )

factory为对象或数组时,factory对象或数据即为该模块输出的接口

define( 'case/car', {
    color: 'white',
    size: 'large'
} );

define( 'case/size', ['large','normal','small'] );

define( dependencies, factory )

当不写id时,此模块则匿名模块

define( ['case/b','case/c'], function( b, c ){
    //todo sth
} );

匿名模块一经定义立即执行,因为没有其他任何模块可以通过id来依赖于它

define( factory )

匿名模块也可以省去dependencies

define(function(){
    //todo sth
});