requirejs.org。我们可以写一个这样的模块:
define(["require", "./relative/name"], function(require) {
var mod = require("./relative/name");
});
或:
define(function(require) {
var mod = require("./relative/name");
});
但为什么我不能这样写:
define(["./relative/name"], function(require) {
var mod = require("./relative/name");
});
答案 0 :(得分:1)
如果第一个参数是作为数组给出的,则它包含要在执行回调之前加载的模块列表。然后,回调函数的参数保存对这些模块的引用。
所以看看第一个例子:这里加载了2个模块require
和./relative/name
。回调只通过参数require
接受第一个回调。第二个传递给参数,但没有命名参数。但是,由于它已经加载,您可以使用var mod = require("./relative/name");
在回调中获取它的引用。 1
至于第二个例子,你列出的链接显示了这个
此表单将使用Function.prototype.toString()来查找require()调用,并将它们与" require"一起添加到依赖项数组中,以便代码可以正常使用相对路径
所以实际上require.js将解析你的函数并查找依赖项,然后像第一个例子中那样创建一个数组。
然而,你最后一个(不工作)的例子试图混合两者。但是来自require.js'它看起来像这样:你有一个依赖./relative/name
,它被传递给名为require
的参数。在函数内部,您尝试获取对同一模块的另一个引用,这次是在mod
的名称下。所以对于require.js一切似乎都很好,但只是得到一个模块的引用,而不是两个,就像你(错误地)期望的那样。
1 使用var mod = require("./relative/name");
的同步模块加载仅在以前通过其他调用(不一定是当前模块)加载模块时才有效。