2010-03-17 52 views
3

a website,我發現下面的代碼,以使一個jQuery插件:瞭解jQuery插件的骨架

(function($){ 
    // Our code here... 
})(jQuery); 

我不明白怎麼上述工程的代碼。我的理解是代碼立即執行,因爲最後()function(){}()。所以整個代碼都說這是一個立即運行的匿名函數。

但我不明白爲什麼包裝需要通過jQuery,它內部需要$傳遞。

從我的理解,$是一個別名jQuery,這意味着幾乎相同。 $jQuery這裏是什麼意思?整體代碼如何用作jQuery插件?

回答

3

jQuery是實際的參數。 $是形式參數。你可以寫得很好:

(function(ForAFewDollarsLess){ 
    ForAFewDollarsLess('#myId') ... 
})(jQuery); 

一個原因是方便 - 它很簡短。您可能在其他庫中以noConflict模式使用jQuery。可能總是打字jQuery是一件麻煩事,或者其他插件遵循不良做法並使用$而不是jQuery。無論哪種方式,您都可以使用類似上面的自我調用功能來解決問題。

0

您通過別名$的功能,因此,它總是會refter jQuery的實際。如果在某個頁面中包含某些其他庫(例如原型也使用$),則您的代碼不會中斷並且工作正常。

0

爲了與其他庫最大兼容,以及,jQuery提供.noConflict()。這將從全局名稱空間中刪除$別名,以便其他庫可以在需要時使用它。

如果你不希望你的插件與.noConflict()工作,這是沒有必要的。

使用封閉也讓你不污染「全球範圍內」與var

0

Gnarf長大瓦爾的全球範圍內的污染,我想補充的功能爲好。

您可能需要使用一個輔助功能,如:

(function($){ 
    // Our code here... 
    $.fn.myPluginFunction = function() { 
    ... 
    var x = foobalizeTheFrobmaster(this.offset()) 
    ... 
    } 

    function foobalizeTheFrobmaster(pos) { 
    // do something useful 
    return something; 
    } 
})(jQuery); 

這樣的內部函數foobalizeTheFrobmaster()完全隱藏在我們關閉。