1

我有这样的遗留代码和模块定义:

define(["a", "b", "c", "d"], function(a, b, c) {
    ...
});

您可以看到,我们在模块中使用的依赖项比实际参数多。

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

4

2 回答 2

1

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

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

于 2015-07-15T21:42:51.620 回答
1

具有比在调用的工厂函数上声明的传递参数列表更长的依赖项列表的定义在defineRequireJS 中很常见,这并不表明代码有任何问题。

例如,当使用带有插件的 jQuery 时,有这样的东西是完全正常的:

define(['jquery', 'jquery.foo'], function ($) {
    // Use the foo plugin.
    $('p').foo(...)

其中 'jquery.foo' 是一个实现 jQuery 插件的模块。jQuery 插件将自己安装为jQuery对象上的方法(我们$在上面的代码中得到)。当使用 RequireJS 加载此类插件时,它们通常没有有用的模块值。如果将上面的函数更改为function ($, foo),则foo参数很可能是undefined

请注意,这些都不需要泄漏全局变量。如果jquery.foo编写为注册为适当的 AMD 模块,则它不依赖于 a jQuery(或$全局),因此jQuery.noConflict(true)可以在加载之前调用以删除 jQuery 默认创建的全局变量。

于 2015-07-16T16:17:05.297 回答