h1
sdfsdfsdfsdf
function loadModules(modulesToLoad) {
var runBlocks = [], moduleFn;
// 依次加载定义在依赖数组中的每一个module
forEach(modulesToLoad, function(module) {
// 如果已经加载过参数指定的module,立刻返回
if (loadedModules.get(module)) return;
loadedModules.put(module, true);
if (isString(module)) {
// 如果是以字符串形式定义的module --- 即module的名字
moduleFn = angularModule(module);
// 递归进行module的加载工作,因为被依赖的module同样还可以依赖于别的module(这里出现的runBlocks我们先行忽略,重点在其中loadModules函数的再次调用)
runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);
runInvokeQueue(moduleFn._invokeQueue);
} else if (isFunction(module)) {
// 如果是以函数形式定义的module
} else if (isArray(module)) {
// 如果是以数组形式定义的module
} else {
// 当module不符合上述几种类型时,抛出异常
assertArgFn(module, 'module');
}
});
return runBlocks;
}