【问题标题】:RequireJS: Different count of dependencies and params at callback functionRequireJS:回调函数中依赖项和参数的不同计数
【发布时间】:2015-07-15 20:45:33
【问题描述】:

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

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

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

这有意义吗?我认为模块 "d" 是多余的。

【问题讨论】:

    标签: javascript requirejs requirejs-define


    【解决方案1】:

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

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

    【讨论】:

    • 你认为这是正常行为吗?它看起来不直观。
    • 没有人阻止你添加“缺失的”d 参数,但它不会在函数中使用 - 根据你的 JS linter 配置,这可能被认为是样式违规。
    • 我发现 d 是全局定义的。所以,这意味着我正在等待 d 加载,之后它会污染全局范围并且可以在回调中使用它。
    【解决方案2】:

    定义的依赖项列表比在 define 调用的工厂函数上声明的传递参数列表长是 RequireJS 的常见情况,并不表示代码有任何问题。

    例如,当使用带有插件的 jQuery 时,出现类似以下内容是完全正常的:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 2012-03-19
      • 2016-05-28
      相关资源
      最近更新 更多