11540 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
Je suis un (très) jeune autodidacte et cela fait plusieurs fois que je rencontre la syntaxe suivante :
var blabla = (function() {
    //Faire quelque chose ...
})();


Alors voilà : Komenkçamarch' ?
Merci d'avance pour votre réponse Smiley smile
Modifié par Bguigui67 (12 Jan 2013 - 13:41)
Si je ne dis pas de bêtises, les deux parenthèses qui sont après la fonction permettent d'exécuter celle-ci.

Je n'aime pas trop ce genre de syntaxe (peu lisible, car on peut louper ces parenthèses) mais ça rends services... parfois...
Salut,

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 Smiley cligne
Modifié par jiber2fr (12 Jan 2013 - 13:05)