Quelle est exactement la fonction JavaScript anonyme f => f faire?

J'utilise une bibliothèque tierce qui a une fonction qui prend les fonctions comme arguments. Je fais des contrôles conditionnels pour décider d'ajouter ou non une fonction particulière en tant que paramètre et, dans certains cas, je ne veux pas fournir une fonction. La fourniture nulle dans ce cas lance une erreur.

J'ai trouvé ce code qui fonctionne, mais je ne comprends pas très bien ce qui se passe.

compose(__DEV__ ? devTools() : f => f) 

f => f équivalent à () => {} une fonction anonyme vide?

f => f est similaire * à la function(f){ return f; } function(f){ return f; }

Tellement proche, mais pas tout à fait ce que vous attendiez.

* – Comme cela a été souligné dans les commentaires, il existe des différences subtiles, mais pour votre question, je ne pense pas qu'elles soient particulièrement pertinentes. Ils sont très pertinents dans d'autres situations.

f => f est la fonction d'identité . Il renvoie simplement l'argument qui a été transmis.

Cette fonction est souvent utilisée comme valeurs par défaut pour les processus de transformation, car elle n'effectue aucune transformation.

f => f équivalent à () => {} une fonction anonyme vide?

Non. La fonction vide ne renvoie rien. La fonction d'identité renvoie l'argument passé.

Si vous voulez savoir ce que f => f signifie, le côté gauche est le paramètre et le côté droit est la valeur de retour. Ainsi, par exemple, f => f*2 , équivaut à:

 function(f) { return f * 2; } 

Le code que vous décrivez renvoie tout ce qui lui est fourni comme entrée.

https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Functions/Arrow_functions

D'autres ont déjà mentionné ce que fait f => f , alors je ne vais pas approfondir cela. Je vais simplement expliquer le reste de la fonction, car il y a une différence entre f => f et __DEV__ ? devTools() : f => f __DEV__ ? devTools() : f => f

L'opérateur ternaire vérifie si __DEV__ est une valeur de vérité, et si oui, il renvoie la fonction devTools() . Sinon, il renvoie la fonction d'identité f => f qui ne fait rien. Mettez autrement: ce code permet certaines fonctions de mode de développement. Sans le code restant, il est difficile de dire ce que ce mode ajoute, mais vraisemblablement, il permettra des informations d'enregistrement supplémentaires et moins d'obscurcissement.

À tout moment avec le dilemme similaire, vous pouvez utiliser Babel pour obtenir la réponse.

Il est revenu comme ceci:

 "use strict"; (function (f) { return f; }); 

BTW, => vous avez utilisé est la fonction ES6 appelée expression de flèche . L'autre expression d'intérêt

 () => {}; // es6 

Se convertisserait à:

 (function () {}); 

Étant donné que les expressions de la fonction de flèche sont toujours anonymes, il est logique si vous ajoutez le nom à la fonction:

 let empty = () => {}; // es6 

Se convertisserait en

 var empty = function empty() {};