2014-03-26 25 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首先在本地作用域搜索變量,然後一直遍歷到窗口作用域(其中$通常處於生命週期)。

也是爲了避免$變量的潛在衝突。如果別的東西定義了一個名爲$的變量,你的插件可能會使用錯誤的定義