Il est juste une fonction de niveau supérieur, qui dans ce cas est pas vraiment nécessaire.
f
est une fonction qui prend une autre fonction (appelée a
) et retours une fonction nouvellement généré qui évaluera a
et affiche un message d'alerte indiquant le résultat. Donc, la ligne du bas appelle f (passant dans une fonction anonyme qui imprime "Hello World"), puis évalue immédiatement la fonction anonyme retournée par f
- qui évaluera l'argument passé (que vous pouvez voir retourne "Hello World") ") puis ouvre une boîte d'alerte.
Le code affiché est fonctionnellement équivalent à
alert("Hello World");
mais il y a deux éléments supplémentaires qui le rendent plus complexe:
- Vous pouvez passer une fonction arbitraire afin de générer la chaîne qui apparaît dans la boîte d'alerte (et cela sera évalué paresseusement, ce qui pourrait être important - par exemple, une fonction pour imprimer le temps actuel/statut de l'application/utilisation de la mémoire lorsque l'alerte est affichée r plus que lorsque la méthode a été créée).
- Vous pouvez générer une fermeture qui affichera cette alerte, puis la passera au lieu de l'exécuter immédiatement.
Mais comme aucun de ces avantages n'est réellement utilisé dans l'extrait de code, je peux voir pourquoi vous seriez confus.
** downvote **: D parce que ce n'est pas si difficile que je pensais? –
** upvote ** - parce que les fonctions de premier ordre, et en particulier l'invocation de la fonction renvoyée par un appel de fonction (par exemple 'f()()') * semble vraiment confuse jusqu'à ce que vous l'obteniez. –
Félicitations, Rakesh Juyal! Vous venez de tomber sur la programmation fonctionnelle! Je me sens si heureux pour vous * sob * –