我编写了一个JavaScript模块加载器,它在循环中定义了不同的模块。
function(moduleList) {
var arr = [];
for (i = 0, l = moduleList.length; i < l; i++) {
var m = moduleList[i];
define(m.guid, function() {
return {
container : m.container,
configuration : m.configuration,
moduleId : m.id
}
});
arr[i] = m;
}
}
之后直接有下一个for循环,其中“需要”先前定义的模块..
for (i = 0, l = arr.length; i < l; i++) {
require([arr[i].id,arr[i].guid], function(module, moduleConfiguration) {
core.utils.log("m.id: " + moduleConfiguration.moduleId);
core.utils.log("init " + moduleConfiguration.moduleId, moduleConfiguration);
module.init(moduleConfiguration);
});
}
现在的问题是,在每个“require”块中,moduleConfiguration和模块是相同的。要进行“require”调用,它使用不同的id,但结果总是相同的。
有人知道如何找到这种方式吗?
答案 0 :(得分:1)
我认为你的定义函数应该是这样的,所以“m”是适当的范围:
function(moduleList) {
var arr = [], i; // declare i!!!!
function def(m) {
define(m.guid, function() {
return {
container : m.container,
configuration : m.configuration,
moduleId : m.id
}
});
}
for (i = 0, l = moduleList.length; i < l; i++) {
var m = moduleList[i];
def(m);
arr[i] = m;
}
}
在您的代码中,所有这些模块回调共享相同的变量“m”。通过引入另一个函数(和另一个范围),您可以确保每个回调都有自己的副本。