11540 sujets
Salut,
Pour comprendre la syntaxe, il faut la décomposer.
Ceci est la déclaration d'une fonction (anonyme):
Ceci est presque identique, les parenthèses ne servent que pour des raisons syntaxiques (pour la suite):
Maintenant, si je veux exécuter ma fonction, j'ajoute comme d'habitude des parenthèses (pouvant éventuellement contenir des paramètres):
Et si je récupère le résultat:
En résumé, cette syntaxe correspond à la déclaration d'une fonction, son exécution immédiate, et la sauvegarde de son résultat dans une variable.
Je n'ai jamais utilisé ce genre de syntaxe, mais elle peut avoir des avantages, par exemple de portée des variables.
Exemple: j'ai trois variables (a, b et c) que je veux additionner. Naturellement, on écrirait:
Maintenant, supposons (c'est pour l'exemple) qu'on ne sache pas additionner trois valeurs d'un coup. On écrirait:
Sauf qu'on a déclaré une nouvelle variable, qui pourrait éventuellement polluer le code situé avant/après. Par exemple, s'il existait déjà une variable 'intermediaire', ce qu'on peut très bien avoir oublié (script externe, développement à plusieurs, etc), l'ensemble du script pourrait ne plus fonctionner.
La solution:
Le résultat est identique, mais notre variable 'intermediaire' n'existe pas en dehors de notre mini-fonction. Pas de pollution, pas de risque d'interférence avec d'autres scripts.
Bien sûr, c'est un exemple idiot pour l'explication
Modifié par jiber2fr (12 Jan 2013 - 13:05)
Pour comprendre la syntaxe, il faut la décomposer.
Ceci est la déclaration d'une fonction (anonyme):
function(){ return 3; }
Ceci est presque identique, les parenthèses ne servent que pour des raisons syntaxiques (pour la suite):
(function(){ return 3; })
Maintenant, si je veux exécuter ma fonction, j'ajoute comme d'habitude des parenthèses (pouvant éventuellement contenir des paramètres):
(function(){ return 3; })()
Et si je récupère le résultat:
var trois = (function(){ return 3; })();
En résumé, cette syntaxe correspond à la déclaration d'une fonction, son exécution immédiate, et la sauvegarde de son résultat dans une variable.
Je n'ai jamais utilisé ce genre de syntaxe, mais elle peut avoir des avantages, par exemple de portée des variables.
Exemple: j'ai trois variables (a, b et c) que je veux additionner. Naturellement, on écrirait:
var a = 1, b = 2, c = 3;
var somme = a + b + c;
Maintenant, supposons (c'est pour l'exemple) qu'on ne sache pas additionner trois valeurs d'un coup. On écrirait:
var a =1, b = 2, c = 3;
var intermediaire = a + b;
var somme = intermediaire + c;
Sauf qu'on a déclaré une nouvelle variable, qui pourrait éventuellement polluer le code situé avant/après. Par exemple, s'il existait déjà une variable 'intermediaire', ce qu'on peut très bien avoir oublié (script externe, développement à plusieurs, etc), l'ensemble du script pourrait ne plus fonctionner.
La solution:
var a =1, b = 2, c = 3;
var somme = (function(){
var intermediaire = a + b;
return intermediaire + c;
})();
Le résultat est identique, mais notre variable 'intermediaire' n'existe pas en dehors de notre mini-fonction. Pas de pollution, pas de risque d'interférence avec d'autres scripts.
Bien sûr, c'est un exemple idiot pour l'explication

Modifié par jiber2fr (12 Jan 2013 - 13:05)