dedlfix: Unsinnige Scope-Erstellung?

Beitrag lesen

Tach!

Mir lief grad eben ein solches Konstrukt über den Weg:

(function($) {  
    $(function() {  
        ...  
    });  
})(jQuery);

Anstelle der drei Punkte befand sich nicht weiter relevanter Code. Hat der Ersteller möglicherweise nur nicht gewusst, dass man das auch wie folgt schreiben kann, oder hat das irgendeine andere sinnvolle Bewandnis, den DOM-Ready-Funktionsaufruf nochmal extra in einen Scope zu packen?

jQuery(function($) {  
    ...  
});

Ich meine, jQuery() liegt im globalen Scope. Diese Funktion im globalen Scope aufzurufen, in dem sie ja sowiso schon liegt, bringt doch keine Nachteile gegenüber einem Aufruf in einem anderen Scope, in den sie hineingereicht wurde, und in dem ansonsten nichts weiter passiert.

Es folgen ein paar erläuternde Worte, die der Wissenbildung für Interessierte dienen sollen und nicht direkt Teil der Fragestellung sind. Das Konstrukt

(function() {  
    ...  
})();

ist eine so genannte IIFE, eine Immediately Invoked Function Expression, also ein sofort aufgerufener Funktionsausdruck. Der dient dazu, einen Scope zu schaffen. Man nimmt so etwas, um zu vermeiden, dass der globale Namensraum mit zu viel Krams gefüllt wird. Das führt sonst eventuell zu Konflikten mit Bezeichnern aus anderen eingebundenen Bibliotheken. Wenn jede(r) seinen eigenen Scope verwendet, werden solche Konflikte vermieden.

Bei jQuery ist es so, dass es den Bezeichner jQuery und das $ als alternativen Namen gibt, wobei man das so konfigurieren kann, dass das $ zur Konfliktvermeidung aus dem globalen Scope herausgehalten wird. Damit man das $ trotzdem nutzen kann und nicht immer das lange "jQuery" schreiben muss, kann man das $ als Parameter in der DOM-Ready-Funktion angeben. jQuery(function ($) { ... }); Anstelle der drei Punkte kann nun Code stehen, der das $ verwendet. Dort existiert durch die anonyme Funktion ein eigener Scope, in dem das $ eingeschlossen ist.

dedlfix.