0

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");
});
4

1 回答 1

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 来说,一切似乎都很好,但只是获得对一个模块的引用,而不是像您(错误地)期望的那样同时获得两个模块。


1var mod = require("./relative/name");如果模块之前已被其他调用(不一定由当前模块)加载,则同步模块加载 using仅适用。

于 2013-09-03T07:19:34.353 回答