从他们的网站上看这个例子
define(function (require) {
var foo = require('foo');
//Define this module as exporting a function
return function () {
foo.doSomething();
};
});
我的问题是,' foo'是异步加载的,它下面的Javscript如何在加载之前不执行?
答案 0 :(得分:2)
http://requirejs.org/docs/api.html#cjsmodule和http://requirejs.org/docs/whyamd.html#sugar中解释了这一点。
Require.js将在某个时刻(在运行函数之前)查看函数的字符串表示,找到所有require
调用以确定依赖关系并加载它们。
为了简化这一过程,并简单地围绕CommonJS模块进行简单包装,支持这种形式的定义,有时也称为“简化的CommonJS包装”:
define(function (require) { var dependency1 = require('dependency1'), dependency2 = require('dependency2'); return function () {}; });
AMD加载程序将使用
require('')
解析Function.prototype.toString()
个调用,然后在内部将上面的定义调用转换为:define(['require', 'dependency1', 'dependency2'], function (require) { var dependency1 = require('dependency1'), dependency2 = require('dependency2'); return function () {}; });
这允许加载器异步加载
dependency1
和dependency2
,执行这些依赖项,然后执行此函数。