我想知道为什么我不能使用这样的require()
函数:
// I'm using define's sugar syntax
define(function(require) {
// This works fine. It assigns myModule to the myModule variable (no callback needed)
var myModule = require('myModule');
var getModule = function(name) {
// This doesn work. Using require() here expects a callback
return require(name);
};
return getModule;
});
第二次require()
调用抛出(但看看DevTools显示实际已加载<name>
):
Uncaught Error: Module name <name> has not been loaded yet for context: _
为什么第一个require()
调用只返回模块(不需要以回调方式执行),但第二个require()
调用仅适用于回调?
答案 0 :(得分:1)
我会在这里跟进我的评论。
如果没有将数组作为第一个参数传递给require
,那么除了在传递require
的定义回调中之外,你不能使用require('jquery', function() {});
。即使这有局限性。
尝试在其他地方执行此操作会引发错误:
define(function(require) {
var $ = require('jquery');
});
http://requirejs.org/docs/errors.html#requireargs
你唯一能做的就是:
define(['jquery'], function($) {
});
这只是一种更好的写作方式:
{{1}}
第一个版本称为糖语法 - http://requirejs.org/docs/whyamd.html#sugar
AMD加载程序将通过使用解析require('')调用 Function.prototype.toString(),然后在内部转换上面的内容 定义调用
我基本上只是重复了在RequireJS文档中解释的内容,但希望这会让它更清晰一些。
我在这里也讨论了这个主题 - How to achieve lazy loading with RequireJS?