考虑他们网站上的这个例子
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#cjsmodule和http://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 () {};
});
这使加载程序可以异步加载
dependency1
和dependency2
,执行这些依赖项,然后执行此功能。关于javascript - 简化的commonJS包装器如何在幕后的require.js中工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34661039/