JavaScript a une fonction déclaration qui est la façon "standard" de déclarer une fonction, avec la syntaxe :
function name([param1, 2...]) {
statements
}
Et il existe une fonction _opérateur_ qui se présente de la même manière que l'instruction de fonction, sauf que le nom est facultatif et qu'il n'est pas utilisé comme une instruction à part entière, mais comme un substitut de l'instruction de fonction. expression est attendu comme dans les deux exemples suivants :
// declare variable name that references a function created by expression
var name = function([param1, 2...]) { statements };
// call someOtherFunction that expects a function as a parameter
someOtherFunction(function() { });
(Il existe de nombreuses autres façons d'utiliser les expressions de fonctions).
Si vous essayez de placer une fonction anonyme sur une ligne sans l'entourer de parenthèses, elle sera considérée comme une fonction. déclaration et donc une erreur de syntaxe car il n'y a pas de nom. En le mettant entre parenthèses, il sera traité comme une expression. à l'intérieur des parenthèses et non comme une déclaration, donc le nom est facultatif. Si vous affectez le résultat de l'expression de fonction à une variable ou si vous l'utilisez d'une autre manière (comme dans mes exemples ci-dessus), vous n'avez pas besoin des parenthèses.
Pour en venir (enfin) à la syntaxe mentionnée dans la question : une fois que vous avez les parens et que votre fonction est traitée comme une expression, vous pouvez utiliser l'une des deux syntaxes que vous avez affichées pour l'invoquer. La première, invoquer "à l'extérieur" des parenthèses, signifie que le premier ensemble de parenthèses sera évalué comme ayant la valeur de l'expression à l'intérieur, qui se trouve être une fonction que vous pouvez alors invoquer. La seconde, invoke "inside", signifie que l'expression de la fonction sera invoquée et que les parens qui l'entourent seront évalués comme ayant la valeur de la fonction.
Dans tous les cas, la valeur de retour de la fonction est jetée parce que vous ne l'affectez à rien.
(Note finale : une expression de fonction peut avoir un nom afin que la fonction puisse s'appeler elle-même de manière récursive).