Partage
  • Partager sur Facebook
  • Partager sur Twitter

Javascript : fonction encapsulée dans des parenthèses ?

c'est quoi cette syntaxe o_O !#@à?

Sujet résolu
9 février 2011 à 22:18:19

Bonjour,

Il y a une syntaxe javascript que j'ai un peu de mal à comprendre, et qu'on retrouve par exemple dans le code de suivi asynchrone de Google Analytics :

var _gaq=_gaq || [];
_gaq.push(['_trackPageview]);

(function() {
	console.log("analytics asynchrone function");
	var ga=document.createElement('script'); ga.type=text/javascript'; ga.async=true;
	ga.src=('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
	var s=document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();


Il y a déclaration d'une fonction sans nom, encapsulées dans des parenthèses. Le code contenu à l'intérieur de la fonction est exécuté au chargement de la page (avant le DOM Ready).

Pourquoi dans ce cas, ne pas avoir écrit simplement :

var _gaq=_gaq || [];
_gaq.push(['_trackPageview]);

console.log("analytics asynchrone function");
var ga=document.createElement('script'); ga.type=text/javascript'; ga.async=true;
ga.src=('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s=document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);


?

Merci
  • Partager sur Facebook
  • Partager sur Twitter
9 février 2011 à 22:27:57

// tu peux stocker une fonction dans une variable
var variable = function ( ) {

};
//puis l'appeler
variable( );

// mais tu peux aussi faire les deux à la fois
function ( ) {

}( );

// mais on ne comprend que le fontion est appelée tout de suite qu'en voyant la dernière ligne
// Si le code est long, on peut don se tromber sur l'utilisation de la fonction
// Donc, par convetion, on rajoute des parenthèses
( function ( ) {

}( ) );

// Par ailleurs, l'intérêt de faire ceci est que les variables seront locales :
( function ( ) {
    var local = "valeur";
}( ) );
typeof local;// "undefined"
  • Partager sur Facebook
  • Partager sur Twitter
10 février 2011 à 0:40:08

Je me posais aussi cette question.
En fait, c'est l'équivalent des blocs en C ou C++.
  • Partager sur Facebook
  • Partager sur Twitter
10 février 2011 à 11:26:43

Exactement :)

Et tu peux faire quelques autres trucs :
Example : Si tu veux avoir une variable locale qui référence la même chose que la variale globale du même nom (ce qui permet d'y accéder plus vite et donc d'améliorer les performances, en plus de guarantir qu'elle ne hangera pas), tu peux faire :
//tu pourrais essayer ça :
var variable = "valeur";
( function ( ) {
    var variable = variable;
}( ) );

// Mais le var rendrait la valeur inacessible avant que tu puisses la lire...

// Donc tu dois le passer en argument :
( function ( variable ) {

} ( variable ) );
  • Partager sur Facebook
  • Partager sur Twitter
10 février 2011 à 23:36:59

Ok, merci pour vos réponses.
  • Partager sur Facebook
  • Partager sur Twitter