Signification exacte de Function literal in JavaScript

En JavaScript, il existe des littératures d'objet et des littéraux de fonction.

Littéral d'objet:

myObject = {myprop:"myValue"} 

Fonction littérale:

 myFunction = function() { alert("hello world"); } 

Quelle est l'importance du mot littéral? Peut-on dire que Java a des littératures de méthodes?

 public void myMethod() { System.out.println("are my literal"); } 

Une fonction littérale est juste une expression qui définit une fonction sans nom.

La syntaxe d'un littéral de fonction ressemble beaucoup à celle de l'instruction de fonction, sauf qu'elle est utilisée comme expression plutôt que comme instruction et qu'aucun nom de fonction n'est requis.

Donc, lorsque vous donnez le nom de la méthode, il ne peut pas s'agir d'une méthode littérale.

Ne comparez pas JavaScript avec Java, ils ont autant de points communs qu'un ours et une baleine. Java est un langage de programmation orienté objet, alors que JavaScript est un langage de programmation fonctionnel.

Avec un langage fonctionnel vient la notion de fonctions comme objets de première classe: les fonctions peuvent être affectées à des variables, peuvent être transmises en tant qu'arguments car elles peuvent être la valeur de retour d'autres fonctions.

Un objet littéral est un objet que vous créez à la volée et en ligne. Même chose pour un littéral de fonction. Mais l'exemple que vous donnez est en fait similaire à une déclaration de fonction régulière:

 function foo() { alert('bar'); } 

Est déplacé vers le haut de la portée, où il est converti en:

 var foo = function() { alert('bar'); }; 

Il est logique, lorsque les fonctions peuvent être transmises comme arguments / valeurs de retour:

 var processed = (function(someFunc)//<-- argument name { return function() { alert('I\'ll call some function in 2 seconds, get ready'); setTimeout(someFunc,2000);//<-- passes a reference to foo, as an argument to setTimeout } })(foo);//pass reference to function object foo here 

Ce n'est que le début de toutes sortes de choses que vous pouvez faire avec JS, pourvu que vous arrêtiez de le traiter comme un sous-ensemble de Java ….

La plus grande différence est la façon dont / quand elle est analysée et utilisée. Prenez votre exemple,

 myFunction = function() { alert("hello world"); } 

Vous ne pouvez exécuter myFunction() qu'après l'arrivée du code, puisque vous déclarez une variable avec une fonction anonyme.

Si vous utilisez l'autre sens,

 function myFunction(){ alert("hello world"); } 

Cette fonction est déclarée au moment de la compilation et peut être utilisée à tout moment dans la portée.

Veuillez également vous référer à cette question .

Ajouter:

Une fonction littérale en JavaScript est synonyme d'une expression de fonction.

Parallèlement aux expressions de fonction, les littéraux de fonction peuvent avoir un identifiant (nom) optionnel.

Donc, si on dit expressions de fonction / littérature de fonction, il comprend des expressions de fonctions / des littératures de fonction sans identifiant (également appelées fonctions anonymes), mais aussi des expressions de fonction / littératures de fonction avec un identifiant. Même si, dans beaucoup de livres, la fonction expression / fonction littérale est utilisée comme synonyme d'expression de fonction / littéral de fonction sans identifiant (fonctions anonymes).

Fonction littéraire

Les objets de fonction sont créés avec des littératures de fonction:

// Crée une variable appelée ajouter et mémoriser une fonction // en elle qui ajoute deux nombres.

 > var add = function (a, b) { > return a + b; }; 

Une fonction littérale comporte quatre parties.

La première partie est la fonction de mots réservée.

La deuxième partie optionnelle est le nom de la fonction. La fonction peut utiliser son nom pour appeler lui-même récursivement. Le nom peut également être utilisé par les débogueurs et les outils de développement pour identifier la fonction. Si une fonction n'a pas de nom, comme indiqué dans l'exemple précédent, on dit qu'il est anonyme.

La troisième partie est l'ensemble des paramètres de la fonction, enveloppé entre parenthèses. Dans les parenthèses, il existe un ensemble de zéro ou plus de noms de paramètres, séparés par des virgules. Ces noms seront définis comme des variables dans la fonction. Contrairement aux variables ordinaires, au lieu d'être initialisées à indéfinies, elles seront initialisées aux arguments fournis lors de l'appel de la fonction.

La quatrième partie est un ensemble de déclarations enveloppées dans des accolades. Ces énoncés sont le corps de la fonction. Ils sont exécutés lorsque la fonction est invoquée.

Une fonction littérale peut apparaître n'importe où qu'une expression peut apparaître …

Source: JavaScript: The Good Parts – Douglas Crockford

Cela signifie:

 myFunction = function () { alert("hello world"); }; 

Est une fonction expression / fonction littérale, mais aussi:

 myFunction = function myFunction() { alert("hello world"); }; 

Est une fonction expression / fonction littérale.