Javascript 了解何时以及如何使用Require.JS

Javascript 了解何时以及如何使用Require.JS,javascript,requirejs,Javascript,Requirejs,我刚刚开始使用Require.JS,对于应该在哪些情况下使用Require.JS以及在这些情况下使用Require.JS的正确方式,我有点不清楚 下面是我目前如何使用Require.JS进行设置的。我有两个函数,function()和functionB()。这两个函数都需要一个附加函数,functionC()才能正常工作 我只想在必要时加载functionC(),即调用functionA()或functionB()时。因此,我有以下文件: functionC.js functionC(){

我刚刚开始使用Require.JS,对于应该在哪些情况下使用Require.JS以及在这些情况下使用Require.JS的正确方式,我有点不清楚

下面是我目前如何使用Require.JS进行设置的。我有两个函数,
function()
functionB()
。这两个函数都需要一个附加函数,
functionC()
才能正常工作

我只想在必要时加载functionC(),即调用functionA()或functionB()时。因此,我有以下文件:

functionC.js

functionC(){
  //do stuff
}
functionA(){  
  define(['functionC'],function(){
    //functionC() is loaded because it is listed as a dependency, so we can proceed
    //do some functionA() stuff
  });
}
functionB(){  
  define(['functionC'],function(){
    //functionC() is loaded because it is listed as a dependency, so we can proceed
    //do some functionB() stuff
  });
}
functionA(){
  require(['functionC'],function(functionC){
    //use funcC in here to call functionC
  });
}
function.js

functionC(){
  //do stuff
}
functionA(){  
  define(['functionC'],function(){
    //functionC() is loaded because it is listed as a dependency, so we can proceed
    //do some functionA() stuff
  });
}
functionB(){  
  define(['functionC'],function(){
    //functionC() is loaded because it is listed as a dependency, so we can proceed
    //do some functionB() stuff
  });
}
functionA(){
  require(['functionC'],function(functionC){
    //use funcC in here to call functionC
  });
}
functionB.js

functionC(){
  //do stuff
}
functionA(){  
  define(['functionC'],function(){
    //functionC() is loaded because it is listed as a dependency, so we can proceed
    //do some functionA() stuff
  });
}
functionB(){  
  define(['functionC'],function(){
    //functionC() is loaded because it is listed as a dependency, so we can proceed
    //do some functionB() stuff
  });
}
functionA(){
  require(['functionC'],function(functionC){
    //use funcC in here to call functionC
  });
}
那么,这个设置正确吗?如果我在同一个页面上同时调用function()和functionB(),那么由于它们都加载了functionC.js文件,是否需要做额外的工作?如果是,这是否一个问题?如果是这样的话,有没有办法设置它,让他们首先检查functionC.js是否已经加载,并且只在没有加载的情况下加载它?最后,这是Require.JS的适当用法吗?

define()
应仅用于定义模块。对于上面的示例,在应该动态加载一段代码的情况下,使用
require()
更合适:

function.js

functionC(){
  //do stuff
}
functionA(){  
  define(['functionC'],function(){
    //functionC() is loaded because it is listed as a dependency, so we can proceed
    //do some functionA() stuff
  });
}
functionB(){  
  define(['functionC'],function(){
    //functionC() is loaded because it is listed as a dependency, so we can proceed
    //do some functionB() stuff
  });
}
functionA(){
  require(['functionC'],function(functionC){
    //use funcC in here to call functionC
  });
}
一些注意事项:

  • require([])
    是异步的,因此如果
    function
    的调用方希望该函数返回值,则可能会出现错误。最好是
    function
    接受在
    function
    完成其工作时调用的回调
  • 上述代码将为每次调用
    function
    调用
    require()
    ;但是,在第一次调用之后,加载
    functionC.js
    不会受到任何惩罚,它只加载一次。第一次调用
    require()
    时,它将加载
    functionC.js
    ,但其余时间,RequireJS知道它已经加载,因此它将调用
    函数(functionC){}
    函数,而不会再次请求
    functionC.js

您可以在此处找到关于RequireJS和JavaScript模块化的详细信息:

感谢您的回复,这非常有帮助。define()和require()是我需要澄清的问题,另外两个要点确实很有帮助。我认为第一个要点是我仍然需要更好地理解的——如何正确处理RequireJS.top link的异步特性——阅读了大量教程,这是迄今为止最好的。简洁明了+1链接可以从理论上回答问题,但必须在此处包含答案的基本部分,并提供链接以供参考。