考虑他们网站上的这个例子

define(function (require) {
    var foo = require('foo');

    //Define this module as exporting a function
    return function () {
        foo.doSomething();
    };
});


我的问题是,由于“ foo”是异步加载的,因此它下面的Javascript在加载之前如何不执行?

最佳答案

http://requirejs.org/docs/api.html#cjsmodulehttp://requirejs.org/docs/whyamd.html#sugar中对此进行了说明。

Require.js将在某个时候(运行该函数之前)查看该函数的字符串表示形式,找到所有require调用以确定依赖项并加载它们。


  为了简化此过程,并使其易于围绕CommonJS模块进行简单包装,我们支持这种形式的define,有时也称为“简化的CommonJS包装”:

define(function (require) {
    var dependency1 = require('dependency1'),
        dependency2 = require('dependency2');
    return function () {};
});

  
  AMD加载程序将使用require('')解析Function.prototype.toString()调用,然后在内部将上述define调用转换为:

define(['require', 'dependency1', 'dependency2'], function (require) {
    var dependency1 = require('dependency1'),
        dependency2 = require('dependency2');
    return function () {};
});

  
  这使加载程序可以异步加载dependency1dependency2,执行这些依赖项,然后执行此功能。

关于javascript - 简化的commonJS包装器如何在幕后的require.js中工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34661039/

10-11 23:36