Estoy usando una biblioteca de terceros que tiene una función que toma funciones como argumentos. Estoy haciendo algunas verificaciones condicionales para decidir si agregar o no una función en particular como parámetro y, en algunos casos, no quiero proporcionar una función. Proporcionar nulo en esos casos arroja un error.
Encontré este código que funciona, pero no entiendo completamente lo que está sucediendo.
compose(__DEV__ ? devTools() : f => f)
¿Es f => f
equivalente a () => {}
una función anónima vacía?
javascript
lambda
ecmascript-6
SomethingOn
fuente
fuente
f
, según MDNRespuestas:
f => f
es parecido afunction(f){ return f; }
Tan cerca, pero no exactamente lo que esperabas.
* - como se ha señalado en los comentarios, existen diferencias sutiles, pero por el bien de su pregunta, no creo que sean particularmente relevantes. Son muy relevantes en otras situaciones.
fuente
f => f
yfunction(f) { return f; }
:)new (f => f)
lanza, tiene un aspecto diferentetoString
y por alguna razón no puedo asimilar los(f => f).arguments
lanzamientos en Chrome pero no en FF o Edge.this
también es diferente. (aunque la diferencia podría no ser observable sithis
no aparece en el cuerpo de la función ... no estoy seguro)f => f
es la función de identidad . Simplemente devuelve el argumento que se pasó.Esta función se utiliza a menudo como valores predeterminados para los procesos de transformación, ya que no realiza ninguna transformación.
No. La función vacía no devuelve nada. La función de identidad devuelve el argumento pasado.
fuente
Si desea saber qué
f => f
significa, el lado izquierdo es el parámetro y el lado derecho es el valor de retorno. Entonces, por ejemplof => f*2
, es equivalente a:El código que describe devuelve todo lo que se le proporciona como entrada.
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
fuente
Otros ya han mencionado lo que
f => f
hace, así que no voy a profundizar en eso. Solo voy a explicar el resto de la función, porque hay una pequeña diferencia entref => f
y__DEV__ ? devTools() : f => f
El operador ternario comprueba si
__DEV__
es un valor verdadero y, si es así, devuelve la funcióndevTools()
. de lo contrario, devuelve la función de identidadf => f
que no hace nada. Dicho de otra manera: este código habilita algunas funciones del modo de desarrollo. Sin el código restante, es difícil saber qué agrega este modo, pero presumiblemente permitirá cierta información de registro adicional y menos ofuscación.fuente
__DEV__ ? devTools() : f => f
no asigna nada af
. ¿Dejó algo fuera del ejemplo de código?En cualquier momento con un dilema similar, puede usar Babel para obtener la respuesta.
Regresó así:
Por cierto, => usaste la función ES6 llamada expresión de flecha . La otra expresión de interés
se convertiría en:
Dado que las expresiones de función de flecha son siempre anónimas , tiene sentido si agrega el nombre a la función:
se convertiría en
fuente