2014-03-26 27 views
1

我一直在寻找刷新我的骨干技能,因为即将到来的工作将使用它(我通常工作在Angular或后端)。我正在通过todomvc的Backbone示例进行研究,并发现了这个问题。我想知道为什么$传入闭包/匿名函数。如果它是依赖注入,我期望下划线也被传入。我注意到$没有通过任何其他文件/关闭。 Github sourceJavaScript依赖注入+ jQuery

/*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({ 
+1

你可以粘贴整个函数吗?我认为,在函数结束时,你会有类似})(jQuery)。如果是这样,你将jQuery对象传入自执行函数,使用变量$在本地作用域。 – Jebin

+1

@Jebin这是正确的,但是我没有看到jQuery在全局范围内已经可用的情况下在本地确定范围的好处。另一件事是,为什么只是jQuery。他们也在这里使用下划线,为什么不在本地范围'_'?另外,整个文件可以在我的文章的Github源代码链接中找到。 编辑:在这里找到第二个问题的答案:http://gregfranko.com/blog/i-love-my-iife/ 感谢您的信息,如果您将其作为答案提交,我会选择它。 – diplosaurus

回答

3

这段代码的目的是提供您的代码“模块化”,隐私和封装。

这是你在为自执行函数内部的jQuery制作的一种别名。 将jQuery传递给括号的目的是为全局变量提供本地范围。这有助于减少查找$变量的开销量,并且在某些情况下允许缩小器的更好的压缩/优化。

将$作为参数发送给匿名函数会使$函数具有小的正面性能,如果函数被称为很多,则为$ local。这是因为JavaScript首先在本地作用域搜索变量,然后一直遍历到窗口作用域(其中$通常处于生命周期)。

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