J'utilise une bibliothèque tierce qui a une fonction qui prend des fonctions comme arguments. Je fais des vérifications conditionnelles 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 de fonction. Fournir null dans ce cas génère une erreur.
J'ai trouvé ce code qui fonctionne, mais je ne comprends pas complètement ce qui se passe.
compose(__DEV__ ? devTools() : f => f)
Est-ce f => f
équivalent à () => {}
une fonction anonyme vide?
javascript
lambda
ecmascript-6
Quelque chose sur
la source
la source
f
, selon MDNRéponses:
f => f
est similaire àfunction(f){ return f; }
Si proche, mais pas tout à fait ce à quoi vous vous attendiez.
* - comme cela a été souligné dans les commentaires, il existe des différences subtiles, mais pour le bien de votre question, je ne pense pas qu'elles soient particulièrement pertinentes. Ils sont très pertinents dans d'autres situations.
la source
f => f
etfunction(f) { return f; }
:)new (f => f)
lancers, cela a un autretoString
et pour une raison quelconque, je ne peux pas vraiment grok les(f => f).arguments
lancers dans Chrome mais pas FF ou Edge.this
est également différente. (bien que la différence ne soit peut-être pas observable si ellethis
n'apparaît pas dans le corps de la fonction ... je ne suis pas sûr)f => f
est la fonction d'identité . Il renvoie simplement l'argument qui a été transmis.Cette fonction est souvent utilisée comme valeur par défaut pour les processus de transformation, car elle n'effectue aucune transformation.
Non. La fonction vide ne renvoie rien. La fonction d'identité renvoie l'argument passé.
la source
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. Par exemplef => f*2
,, équivaut à:Le code que vous décrivez renvoie tout ce qui lui est fourni en entrée.
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
la source
D'autres ont déjà mentionné ce que
f => f
fait, alors je ne vais pas approfondir cela. Je vais juste expliquer le reste de la fonction, car il y a une petite différence entref => f
et__DEV__ ? devTools() : f => f
L'opérateur ternaire vérifie si
__DEV__
est une valeur de vérité, et si c'est le cas, il renvoie la fonctiondevTools()
. sinon, il renvoie la fonction d'identitéf => f
qui ne fait rien. En d'autres termes: ce code active certaines fonctions du mode développement. Sans le code restant, il est difficile de dire ce que ce mode ajoute, mais vraisemblablement, il activera des informations de journalisation supplémentaires et moins d'obscurcissement.la source
__DEV__ ? devTools() : f => f
n'attribue rien àf
. Avez-vous omis quelque chose de l'exemple de code?À tout moment avec le même dilemme, vous pouvez utiliser Babel pour obtenir la réponse.
Il est revenu comme ceci:
BTW, => vous avez utilisé la fonction ES6 appelée expression de flèche . L'autre manifestation d'intérêt
se convertirait en:
Étant donné que les expressions de fonction fléchée sont toujours anonymes, il est logique que vous ajoutiez le nom à la fonction:
se convertirait en
la source