我使用RequireJS定义下面的模块:
define('mod1', ['jquery'], function($){
return function mod1(){
//do something
}
});
define('mod2', ['jquery','jquery.plugin1','mod1'], function($, mod1){
var mod2 = mod2||{};
mod2.A = function(){
return new mod1();
}
})
如果像上面那样定义mod2
,当代码执行到new mod1()
时,它将抛出mod1 is undefined
。如果我在下面定义mod2
,那么工作正常。
define('mod2', ['mod1','jquery','jquery.plugin1'], function(mod1,$){
var mod2 = mod2||{};
mod2.A = function(){
return new mod1();
}
})
有人可以解释原因以及在加载依赖项时RequireJS的工作原理吗?
答案 0 :(得分:1)
这不起作用:
define('mod2', ['jquery','jquery.plugin1','mod1'], function($, mod1){
因为您为匿名函数提供的参数从依赖列表中获取值之前的相同顺序所以$
参数获取模块{{1}的值并且jquery
参数从mod1
获取其值,并且模块jquery.plugin1
的值作为第3个参数传递,但您必须使用自动变量{{1}得到它,因为你没有指定第三个参数。
请注意,jQuery插件通过修改mod1
而不是返回值来自行安装,因此插件arguments
的值作为模块是$
。
执行此操作时,它可以正常运行:
jquery.plugin1
因为依赖关系的顺序正确地反映在参数的顺序中。