104 votes

Que fait exactement la fonction JavaScript anonyme f => f?

Je suis à l'aide d'une bibliothèque tierce, qui a une fonction qui prend des fonctions comme arguments. Je suis en train de faire quelques conditionnelle des vérifications pour décider si ou de ne pas ajouter une fonction comme paramètre, et dans certains cas, je ne veux pas donner une fonction. Fournir la valeur null dans ce cas renvoie une erreur.

J'ai trouvé ce code qui fonctionne, mais je ne comprends pas tout ce qui se passe.

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

Est - f => f équivalent à () => {} vide d'une fonction anonyme?

191voto

Felix Kling Points 247451

f => f est la fonction identité. Il retourne simplement l'argument qui a été passé.

Cette fonction est souvent utilisée en tant que valeurs par défaut pour des processus de transformation, car il n'effectue pas de transformation.

Est - f => f équivalent à () => {} vide d'une fonction anonyme?

Pas de. Le vide, la fonction ne retourne rien. L'identité fonction renvoie la valeur passée en argument.

114voto

Jamiec Points 35773

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

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

* - comme cela a été souligné dans les commentaires, il existe des différences subtiles, mais je ne pense pas que votre question soit particulièrement pertinente. Ils sont très pertinents dans d'autres situations.

19voto

Yathi Points 488

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

function(f) { 
  return f * 2; 
}

Le code qui vous décrire renvoie tout ce qui est fourni en entrée.

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

9voto

Nate Kerkhofs Points 1792

D'autres l'ont déjà mentionné ce qu' f => f fait, donc je ne vais pas aller plus profondément. Je vais juste vous expliquer le reste de la fonction, parce qu'il y a peu de différence entre f => f et __DEV__ ? devTools() : f => f

L'opérateur ternaire vérifie si __DEV__ est un truthy valeur, et si oui, de retour de la fonction devTools(). sinon, de retour de la fonction identity f => f qui ne fait rien. Pour le dire autrement: ce code permet à certains mode de développement des fonctions. Sans le reste du code, il est difficile de dire ce que ce mode ajoute, mais sans doute, il permettra à certains journalisation supplémentaire de l'information et de moins de dissimulation.

9voto

prosti Points 4630

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

Il est rentré comme ceci:

"use strict";

(function (f) {
  return f;
});

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

() => {};  // es6

serait de convertir:

(function () {});

Depuis flèche expressions de fonction sont toujours anonymes, c'est logique, si vous ajoutez le nom de la fonction:

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

serait de convertir à

var empty = function empty() {}; 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X