define(function (require) {
// ... 很多代码
require('a');
// ... 很多代码
require(['b'], function (b) {});
// ... 很多代码
require('c');
});
require(['b'], function (b) {}); 这句话为什么是异步呢?这里又没有计时器,应该只是一个回调函数吧?并不是异步才对啊
define(function (require) {
// ... 很多代码
require('a');
// ... 很多代码
require(['b'], function (b) {});
// ... 很多代码
require('c');
});
require(['b'], function (b) {}); 这句话为什么是异步呢?这里又没有计时器,应该只是一个回调函数吧?并不是异步才对啊
这是requirejs
或者说AMD
规范里的内容,我相信你的示例代码少了东西。
理论上代码应该是这样:
define(['a', 'c'], function (require) {
// ... 很多代码
require('a');
// ... 很多代码
require(['b'], function (b) {});
// ... 很多代码
require('c');
});
a
和c
在加载当前模块前,就已经把definition下载好了,所以直接require
可以同步拿到该模块内容。 这种写法,印象中是为了对commonjs
规范的代码友好,方便迁移。
b
的部分就是纯粹AMD
内容,异步加载了。
还是建议先读requirejs
的文档
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答4.9k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
第二句的意思是,加载 b 模块,完成后执行你提供的回调。
这不是异步?
你写的代码是按同步的方式写的(看起来按顺序执行),但事实上回调函数是在未来被调用的(调用者在 require 函数内),所以回调有可能很快被执行,也有可能很慢(取决于 b 模块的加载情况),甚至可能不执行(require 内部在调用它之前抛出异常)。
这就是异步。