To co napisałeś pod koniec posta jest prawdą.
Z małym wyjątkiem: to nie jest "blok", tylko po prostu funkcja. Różnica trochę istotna, bo w JavaScripcie nie ma zasięgu blokowego.
To, co masz w tym fragmencie kodu, to po prostu funkcja anonimowa, która jest natychmiast uruchamiana. Ten kod jest niemal równoważny czemuś takiemu:
Kopiuj
function cośtam(jQuery) {
}
cośtam(jQuery);
Czyli tworzymy funkcję i linijkę niżej ją uruchamiamy. Ponieważ nie mamy zamiaru uruchamiać tej funkcji wielokrotnie, nie potrzebujemy jej nadawać nazwy cośtam. Lepiej w takim wypadku pominąć nazwę funkcji, bo nie chcemy zaśmiecać globalnej przestrzeni nazw niepotrzebnymi funkcjami (inni programiści musieliby uważać żeby nie nadpisać naszej nazwy i vice versa).
Rozwiązaniem jest właśnie zastosowanie funkcji anonimowej, czyli funkcji bez nazwy. Taką funkcję można przekazać jako parametr albo po prostu natychmiast odpalić, tak jak masz w Twoim kodzie.
Ten kod jest jednak ździebko bez sensu jeśli chodzi o argument jQuery, co widać w tym przykładzie, który dałem powyżej. Po co w ogóle przekazujesz tam parametr jQuery, skoro poza funkcją, tj. globalniemasz już zdefiniowaną nazwę jQuery (siedzi tam oczywiście biblioteka jQuery)? Możesz spokojnie użyć tej globalnej zmiennej jQuery, nie musisz definiować parametru o tej samej nazwie i przekazywać funkcji biblioteki jQuery.
Czyli mógłbyś to skrócić do tego zapisu i wyszłoby na to samo:
Kopiuj
(function(){
// tu nazwa jQuery jest też zdefiniowana,
})();
ALE... Ten parametr się czasem przydaje. Jest kilka bibliotek, które definiują funkcję o nazwie $. jQuery też taką funkcję definiuje jako skrót, dzięki czemu nie musimy pisać jQuery("#foo").addClass("bar"), tylko piszemy $("#foo").addClass("bar"). Ale jeśli na stronie mielibyśmy kilka różnych bibliotek, to inna z bibliotek mogłaby nadpisać tę funkcję $.
Jeśli w naszej funkcji anonimowej chcemy korzystać z nazwy $ jako skrótu dla jQuery, to wtedy przydaje nam się zdefiniowanie parametru formalnego o nazwie $ i przekazanie parametrowi obiektu jQuery, o tak:
Kopiuj
(function($){
// tu możemy się bezpiecznie odnosić do jQuery
// za pomocą $, np.:
$("#coś").addClass("klasa");
})(jQuery);
Nie ma w znaku $ niczego specjalnego. Jeśli np. lubimy wiewiórki, to moglibyśmy użyć słowa wiewiorka jako nazwy parametru formalnego naszej funkcji anonimowej. I wtedy do jQuery odnosilibyśmy się wewnątrz tej funkcji poprzez nazwę wiewiorka:
Kopiuj
(function(wiewiorka) {
wiewiorka("#coś").addClass("klasa");
})(jQuery);
Wracając do wersji ze znakiem dolara: moglibyśmy praktycznie to samo zapisać w poniższy sposób:
Kopiuj
(function() {
var $ = jQuery;
$("#coś").addClass("klasa");
})();
Tylko to jest odrobinkę bardziej rozwlekłe, bo musimy napisać słowo "var" ;).