Resumen
Pouvez-vous expliquer le raisonnement qui sous-tend la syntaxe des fonctions anonymes encapsulées en JavaScript ? Pourquoi cela fonctionne-t-il ? (function(){})();
mais ce n'est pas le cas : function(){}();
?
Ce que je sais
En JavaScript, on crée une fonction nommée comme ceci :
function twoPlusTwo(){
alert(2 + 2);
}
twoPlusTwo();
Vous pouvez également créer une fonction anonyme et l'affecter à une variable :
var twoPlusTwo = function(){
alert(2 + 2);
};
twoPlusTwo();
Vous pouvez encapsuler un bloc de code en créant une fonction anonyme, puis en l'entourant de parenthèses et en l'exécutant immédiatement :
(function(){
alert(2 + 2);
})();
Ceci est utile lors de la création de scripts modulaires, pour éviter d'encombrer la portée actuelle, ou la portée globale, avec des variables potentiellement conflictuelles - comme dans le cas des scripts Greasemonkey, des plugins jQuery, etc.
Maintenant, je comprends pourquoi ça marche. Les parenthèses enferment le contenu et n'exposent que le résultat (je suis sûr qu'il y a une meilleure façon de décrire cela), comme avec (2 + 2) === 4
.
Ce que je ne comprends pas
Mais je ne comprends pas pourquoi cela ne fonctionne pas aussi bien :
function(){
alert(2 + 2);
}();
Vous pouvez m'expliquer ça ?
44 votes
Je pense que toutes ces notations variées et ces façons de définir/établir/appeler les fonctions sont la partie la plus déroutante du travail initial avec javascript. Les gens ont tendance à ne pas en parler non plus. Ce n'est pas un point sur lequel on insiste dans les guides ou les blogs. Cela m'étonne parce que c'est quelque chose de déroutant pour la plupart des gens, et les personnes qui parlent couramment le js doivent être passées par là aussi. C'est comme une réalité taboue et vide dont on ne parle jamais.
1 votes
Lisez également ce qui concerne le objectif de cette construction ou vérifier un ( technique ) explication (également aquí ). Pour le placement de la parenthèse, voir cette question sur leur localisation .
0 votes
OT : Pour ceux qui veulent savoir où ces fonctions anonymes sont beaucoup utilisées, lisez svp adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html
0 votes
Il s'agit d'un cas typique d'expressions de fonctions immédiatement invoquées (IIFE).