Korzystają z closures.
Krótkie wyjaśnienie: Ponieważ JS używa oscyloskopu na poziomie funkcji, można wykonać szereg czynności w ramach funkcji i pozostawić je w tym zakresie. Jest to przydatne do wywoływania kodu, który nie powoduje bałaganu w globalnej przestrzeni nazw. Pozwala także na tworzenie prywatnych zmiennych - jeśli zadeklarujesz zmienną wewnątrz anonimowej funkcji i wykonasz ją natychmiast, tylko inny kod wewnątrz anonimowej funkcji może uzyskać dostęp do tej zmiennej.
Załóżmy na przykład, że chcę utworzyć globalny unikalny generator identyfikatorów. Można zrobić kodu:
var counter = 0;
var genId = function()
{
counter = counter + 1;
return counter;
}
Jednak teraz każdy może bałagan z licznika, a ja teraz zanieczyszczona globalnej przestrzeni nazw z dwóch zmiennych (licznika i genId).
Zamiast tego mogę korzystać z anonimową funkcję do generowania mój funkcję licznika:
var genId = function()
{
var counter = 0;
var genIdImpl = function()
{
counter = counter + 1;
return counter;
}
return genIdImpl;
}();
Teraz mam tylko jedną zmienną w globalnej przestrzeni nazw, co jest korzystne. Co ważniejsze, zmienna licznika jest teraz bezpieczna przed modyfikacją - istnieje tylko w zakresie funkcji anonimowej i dlatego tylko funkcja genIdImpl (która została zdefiniowana w tym samym zakresie) może uzyskać do niej dostęp.
Wygląda jak w przykładowym kodzie YUI, oni po prostu chcą wykonać kod, który w ogóle nie zanieczyszcza globalnej przestrzeni nazw.
Zobacz także: http://stackoverflow.com/questions/631187/javascript-scope-and-closure/ –