2010-06-21 4 views

Répondre

9

Il s'agit de créer une nouvelle portée (pour éviter de polluer le parent). Étonnamment (pour les débutants familiers avec les langages C-like), JavaScript ne crée pas une nouvelle portée lorsque vous utilisez des accolades seul:

{ 
    var a = "foo"; 
} 
// a still == "foo". 

(function() { 
    var b = "bar"; 
})(); 
// b doesn't exist. 

Cependant, les fonctions créent toujours une nouvelle portée. Grâce aux fermetures de JavaScript, les variables existantes des portées parentales sont automatiquement placées (fermées) dans la fonction anonyme. Ainsi, dans les cas (comme dans la question) où la fonction anonyme est utilisée nulle part ailleurs (puisqu'elle n'est jamais assignée), elle agit essentiellement comme une accolade de style C.

2

Il empêche la pollution de l'espace de noms global. C'est-à-dire que les identificateurs ne sortiront pas vers le reste de la page/code/script.

3

Contrairement à beaucoup d'autres langages délimités par des accolades, JavaScript ne place pas les variables dans le bloc englobant le plus proche. Au lieu de cela, les instructions var étendent les variables à la fonction englobante. Une erreur courante parmi les programmeurs JavaScript est de déclarer var s dans une boucle ou conditionnelle avec l'hypothèse qu'ils vont sortir de la portée à la fin du bloc. La création d'une fonction anonyme, puis son exécution immédiate (en plaçant le () après celle-ci) entraîne la création d'une nouvelle portée, garantissant que les variables déclarées ne gêneront pas les autres scripts JavaScript susceptibles de traîner. Envelopper le tout dans un autre ensemble de parens en fait une expression qui peut résoudre certaines ambiguïtés de syntaxe pour une compatibilité maximale avec le navigateur.