Javascript RequireJS依赖项的加载顺序
我使用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(){
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,$){
因为依赖项的顺序正确地反映在参数的顺序中。Uhhjquery.plugin1
依赖项返回undefined
。对不起,我不明白为什么jquery.plugin1返回undefined。如果使用snippet2,它工作得很好,还可以使用jquery.plugin1oh,我明白了。我只是认为所有jquery插件都将加载在一起,并作为“$”使用。谢谢你的解释。