Stanno approfittando di closures.
Una breve spiegazione: poiché JS utilizza l'ambito a livello di funzione, è possibile eseguire una serie di azioni all'interno di una funzione e mantenerle in tale ambito. Questo è utile per invocare il codice che non interferisce con lo spazio dei nomi globale. Permette anche di creare variabili private: se dichiari una variabile all'interno di una funzione anonima e la esegui immediatamente, solo l'altro codice all'interno della funzione anonima può accedere a tale variabile.
Ad esempio, supponiamo di voler creare un generatore di ID univoco globale. Si potrebbe fare il codice come questo:
var counter = 0;
var genId = function()
{
counter = counter + 1;
return counter;
}
Tuttavia, ora chiunque può pasticciare con contatore, e ora ho inquinato il namespace globale con due variabili (contatore e GenID).
Invece, ho potuto utilizzare una funzione anonima per generare la mia funzione di contatore:
var genId = function()
{
var counter = 0;
var genIdImpl = function()
{
counter = counter + 1;
return counter;
}
return genIdImpl;
}();
Ora, ho solo una variabile nel namespace globale, che è vantaggioso. Ancora più importante, la variabile contatore è ora al sicuro dall'essere modificata, esiste solo nell'ambito della funzione anonima e quindi solo la funzione genIdImpl (che è stata definita nello stesso ambito) può accedervi.
Sembra nel codice di esempio di YUI, vogliono solo eseguire codice che non inquini affatto lo spazio dei nomi globale.
fonte
2009-03-30 18:53:54
Vedere anche: http://stackoverflow.com/questions/631187/javascript-scope-and-closure/ –