J'ai beaucoup vu ce modèle dans les fichiers javascript:

(function ($) 
{
   //Perform operation X
}(jQuery));

Existe-t-il une différence entre le placement du code ci-dessus dans un fichier js et le suivant:

function myFunc($) 
{
   //Perform operation X
}
myFunc(jQuery);

Ou est-ce simplement plus concis?

3
C.J. 14 oct. 2011 à 16:48

3 réponses

Meilleure réponse

Votre deuxième extrait définit un symbole public, myFunc. Si quelqu'un d'autre utilise ce symbole pour une bibliothèque, vous le remplaceriez et pourriez détruire sa fonctionnalité. Le premier extrait n'a pas de nom et est donc plus sûr.

5
configurator 14 oct. 2011 à 12:50

Le seul avantage du premier sur le second est que vous ne polluez pas la portée avec le nom de variable (myFunc).

C'est à dire. dans le deuxième exemple, si vous aviez déjà une variable nommée myFunc dans la même portée, sa valeur serait écrasée par la fonction, où comme dans le premier exemple, ce ne serait pas le cas.

De plus, le deuxième exemple vous permet évidemment d'invoquer myFunc plusieurs fois, alors que le premier exemple ne le permet qu'une seule fois.

2
Matt 14 oct. 2011 à 12:50

Tout d'abord, je pense que votre premier extrait de code devrait être:

(function ($) 
{
   //Perform operation X
})(jQuery);

Et pour autant que je sache, il n'y a pas de différence entre les deux codes, sauf que le second crée la fonction, la stocke dans une variable globale, puis l'appelle, que le premier crée une fonction anonyme et l'appelle immédiatement.

2
Deleteman 14 oct. 2011 à 12:58