第二句为什么是异步呢?

define(function (require) {
    // ... 很多代码
    require('a');
    // ... 很多代码
    require(['b'], function (b) {});
    // ... 很多代码
    require('c');
});

require(['b'], function (b) {}); 这句话为什么是异步呢?这里又没有计时器,应该只是一个回调函数吧?并不是异步才对啊

阅读 2.5k
3 个回答

第二句的意思是,加载 b 模块,完成后执行你提供的回调。

这不是异步?

你写的代码是按同步的方式写的(看起来按顺序执行),但事实上回调函数是在未来被调用的(调用者在 require 函数内),所以回调有可能很快被执行,也有可能很慢(取决于 b 模块的加载情况),甚至可能不执行(require 内部在调用它之前抛出异常)。

这就是异步。

还是先把问题分析清楚,别这么早确定是异步问题

这是requirejs或者说AMD规范里的内容,我相信你的示例代码少了东西。
理论上代码应该是这样:

define(['a', 'c'], function (require) {
    // ... 很多代码
    require('a');
    // ... 很多代码
    require(['b'], function (b) {});
    // ... 很多代码
    require('c');
});

ac在加载当前模块前,就已经把definition下载好了,所以直接require可以同步拿到该模块内容。 这种写法,印象中是为了对commonjs规范的代码友好,方便迁移。

b的部分就是纯粹AMD内容,异步加载了。

还是建议先读requirejs的文档

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题