Javascript RequireJS:回调函数中依赖项和参数的不同计数

Javascript RequireJS:回调函数中依赖项和参数的不同计数,javascript,requirejs,requirejs-define,Javascript,Requirejs,Requirejs Define,我有如下遗留代码和模块定义: define(["a", "b", "c", "d"], function(a, b, c) { ... }); 您可以看到,依赖项比我们在模块中使用的实际参数更多 这有什么意义吗?我认为模块“d”是多余的。这只意味着模块“d”(或者更准确地说,调用“d”的工厂函数的结果)不会作为参数(例如d)传递给函数,因此它在函数中不可用 模块“d”可能会执行一些带有副作用的代码,因此删除它可能会潜在地改变应用程序的行为(即破坏某些东西).在RequireJS中经常出

我有如下遗留代码和模块定义:

define(["a", "b", "c", "d"], function(a, b, c) {
    ...
});
您可以看到,依赖项比我们在模块中使用的实际参数更多


这有什么意义吗?我认为模块“d”是多余的。

这只意味着模块“d”(或者更准确地说,调用“d”的工厂函数的结果)不会作为参数(例如
d
)传递给函数,因此它在函数中不可用


模块“d”可能会执行一些带有副作用的代码,因此删除它可能会潜在地改变应用程序的行为(即破坏某些东西).

在RequireJS中经常出现这样的情况,即define的依赖项列表比在
define
调用的工厂函数中声明的传递参数列表长,这并不表示代码有任何问题

例如,当将jQuery与插件一起使用时,拥有如下内容是完全正常的:

define(['jquery', 'jquery.foo'], function ($) {
    // Use the foo plugin.
    $('p').foo(...)
其中“jquery.foo”是实现jquery插件的模块。jQuery插件作为方法安装在
jQuery
对象上(我们在上面的代码中得到
$
)。当这些插件加载了RequireJS时,它们通常没有有用的模块价值。如果将上述函数更改为
函数($,foo)
,则
foo
参数很可能是
未定义的


请注意,所有这些都不会导致全局泄漏。如果写入
jquery.foo
以使其注册为适当的AMD模块,则它不依赖于
jquery
(或
$
global),因此
jquery.noConflict(true)
可以在加载之前被调用以删除jquery默认创建的全局变量。

您认为这是正常行为吗?这看起来不直观。没有人阻止您添加“missing”
d
参数,但它在函数中未被使用-根据您的JS linter配置,这可能被视为样式冲突。我发现d是全局定义的。所以,这意味着我在加载d时等待,因为它会污染全局范围,并且可以在回调时使用它。