La différence entre un IIFE nommé et l'appel d'une fonction de nom est-elle immédiatement?

Existe-t-il une différence entre et IIFE?

(function foo () { var var_of_concern; }()); 

Et une fonction simple

 function foo () { var var_of_concern; } foo(); 

La mise en garde qui m'intéressait, c'est que si je ne transmets rien ni à l'IIFE ni à la fonction, l'IIFE gardera-t-il la mémoire plus longue?

Le contraire, bien que ce ne soit probablement pas une préoccupation sérieuse.

Les deux sont syntaxiquement pas les mêmes. La seconde déclare une fonction et la lie au symbole local "foo". Cette fonction restera après l'appel de fonction.

La forme IIFE est syntaxiquement un seul mode d'expression. Le deuxième formulaire comporte deux instructions, une déclaration de déclaration de fonction et une déclaration d'expression (l'appel de fonction).

La façon dont un appel de fonction gère les déclarations de variables locales n'a rien à voir avec la création de l'objet fonction. Si les deux fonctions de votre exemple sont identiques, il n'y a pas de différence dans la façon dont cet espace est attribué aux variables locales dans un appel de fonction.

Edit – la différence syntaxique clé est la suivante: la function mot-clé au début d'une nouvelle instruction introduit une déclaration de déclaration de fonction. Cette forme syntaxique ne prévoit pas une invocation immédiate. C'est ce qui suit:

 function hello() { // some code }(); // <---- ERROR 

Est une erreur de syntaxe.

Lorsque le mot-clé de la function apparaît dans n'importe quel autre contexte (bien, tout contexte valide), alors ce n'est pas une déclaration de fonction – c'est une explication de fonction (ou une définition de fonction, je devrais vérifier l'explication). Ce sont toutes les choses qui peuvent faire partie d'une expression en JavaScript:

  5 "hello" false (2 + 5) (function() { alert("Hi!"); }) 

Notez que le dernier exemple implique des parenthèses – ce qui est généralement fait pour "désamorcer" le "Oh regardez une déclaration de fonction!" Comportement de l'analyseur. Cette parenthèse d'ouverture signifie que le mot-clé de function n'apparaît pas au début absolu de l'instruction, donc c'est donc une expression d'instance de fonction.