2010-02-10 7 views
9

J'ai remarqué dans JQuery que la structure de code suivant est utiliséQuel est l'avantage d'utiliser (function() {...})() en JavaScript

(function(){var l=this,g,y=l.jQuery,p=l.$,...})()

qui semble créer une fonction, et appeler.

Quel est l'avantage de prendre cette approche par rapport à avoir le contenu de la fonction en ligne?

+1

double: http://stackoverflow.com/questions/592396/what-is-the-purpose-of-a-self-executing-function-in-javascript –

+0

Cette un aussi bien: http://stackoverflow.com/questions/631187/javascript-scope-and-closure Le problème est que la trouvabilité de ces questions/réponses n'est pas bonne. Si tout ce que je sais c'est "[javascript] (function()", alors la recherche ne fait pas du bon travail en trouvant quelque chose d'utile. – Alan

Répondre

7

Il crée une fermeture pour éviter les conflits avec d'autres parties du code. Voir ceci:

particulièrement pratique si vous avez une autre bibliothèque qui utilise la méthode $() et vous devez conserver la possibilité d'utiliser cela avec jQuery aussi. Ensuite, vous pouvez créer une fermeture comme celle-ci:

(function($) { 
    // $() is available here 
})(jQuery); 
4

Il crée une étendue pour les variables, en particulier en définissant $ par exemple pour lier à jQuery, indépendamment de ce que les autres bibliothèques l'écrasent. Pensez-y comme un espace de noms anonyme.

0

Il est comme:

var foo = function(){var l=this,g,y=l.jQuery,p=l.$,...}; 
foo(); 

Mais plus simples et ne nécessitent pas une variable globale.

0

Il permet d'avoir des variables locales et opérations à l'intérieur de la fonction, au lieu d'avoir à les transformer en les mondiaux.

1

Avec la fonction anonyme invoquant vous créez une portée locale, elle est très efficace et s'appelle directement.

Vous pouvez lire à ce sujet here

Questions connexes