【问题标题】:JavaScript Dependency Injection + jQueryJavaScript 依赖注入 + jQuery
【发布时间】:2014-03-26 08:53:45
【问题描述】:

我一直在寻求更新我的 Backbone 技能,因为即将到来的工作将使用它(我通常在 Angular 或后端工作)。我正在查看 todomvc 的 Backbone 示例并遇到了这个。我想知道为什么将 $ 传递给闭包/匿名函数。如果是依赖注入,我希望下划线也会被传入。我注意到 $ 没有在任何其他文件/闭包中传递。 Github source

/*global Backbone, jQuery, _, ENTER_KEY */
var app = app || {};

(function ($) {
    'use strict';

    // The Application
    // ---------------

    // Our overall **AppView** is the top-level piece of UI.
    app.AppView = Backbone.View.extend({

【问题讨论】:

  • 你能粘贴整个函数吗?我想,在函数的最后你会得到类似 })(jQuery) 的东西。如果是这样,您将使用变量 $ 将 jQuery 对象传递到自执行函数中以在本地进行作用域。
  • @Jebin 没错,但是当 jQuery 已经在全局范围内可用时,我看不到在本地范围内限定 jQuery 的好处。另一件事是,为什么只是 jQuery。他们也在这里使用下划线,为什么不在本地范围内_ 呢?此外,整个文件可在我的帖子中的 Github 源链接中找到。编辑:在这里找到第二个问题的答案:gregfranko.com/blog/i-love-my-iife 感谢您提供的信息,如果您将其作为答案提交,我会选择它。

标签: javascript jquery backbone.js scope


【解决方案1】:

此代码的目的是为您的代码提供“模块化”、隐私和封装。

这是您在自执行函数中为 jQuery 创建的一种别名。 将 jQuery 传入括号的目的是为全局变量提供局部范围。这有助于减少查找 $ 变量的开销,并在某些情况下允许对压缩器进行更好的压缩/优化。

将 $ 作为参数发送给匿名函数会使 $ 成为该函数的本地函数,如果 $ 函数被大量调用,这对性能有小的积极影响。这是因为 javascript 首先在本地范围内搜索变量,然后一直向下遍历到窗口范围(通常是 $ 所在的位置)。

也是为了避免 $ 变量的潜在冲突。如果其他东西定义了一个名为 $ 的变量,你的插件可能使用了错误的定义

【讨论】:

    猜你喜欢
    • 2013-12-02
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 2011-04-08
    • 2014-06-12
    相关资源
    最近更新 更多