Javascript RequireJS依赖项的加载顺序

Javascript RequireJS依赖项的加载顺序,javascript,requirejs,Javascript,Requirejs,我使用RequireJS定义了以下模块: define('mod1', ['jquery'], function($){ return function mod1(){ //do something } }); define('mod2', ['jquery','jquery.plugin1','mod1'], function($, mod1){ var mod2 = mod2||{}; mod2.A = function(){

我使用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是未定义的
。如果我像下面这样定义
mod2
,效果很好

define('mod2', ['mod1','jquery','jquery.plugin1'], function(mod1,$){
     var mod2 = mod2||{};
     mod2.A = function(){
         return new mod1();
     }
})
有人能解释一下原因以及在加载依赖项时RequireJS是如何工作的吗?

这不起作用:

define('mod2', ['jquery','jquery.plugin1','mod1'], function($, mod1){
因为您为匿名函数提供的参数以相同的顺序从依赖项列表中获取值,所以
$
参数获取模块
jquery
的值,
mod1
参数从
jquery.plugin1
获取其值,模块
mod1
的值作为第三个参数传递,但是您必须使用自动变量
arguments
来获取它,因为您没有指定第三个参数

请注意,jQuery插件是通过修改
$
而不是返回值来安装的,因此插件
jQuery.plugin1
作为模块的值是
未定义的

当您这样做时,它会起作用:

define('mod2', ['mod1','jquery','jquery.plugin1'], function(mod1,$){

因为依赖项的顺序正确地反映在参数的顺序中。

Uhh
jquery.plugin1
依赖项返回
undefined
。对不起,我不明白为什么jquery.plugin1返回undefined。如果使用snippet2,它工作得很好,还可以使用jquery.plugin1oh,我明白了。我只是认为所有jquery插件都将加载在一起,并作为“$”使用。谢谢你的解释。