Estou usando uma biblioteca de terceiros que tem uma função que usa funções como argumentos. Estou fazendo algumas verificações condicionais para decidir se devo ou não adicionar uma função específica como um parâmetro e, em alguns casos, não desejo fornecer uma função. Fornecer nulo nesses casos gera um erro.
Eu encontrei este código que funciona, mas não entendo totalmente o que está acontecendo.
compose(__DEV__ ? devTools() : f => f)
É f => f
equivalente a () => {}
uma função anônima vazia?
javascript
lambda
ecmascript-6
SomethingOn
fonte
fonte
f
, de acordo com MDNRespostas:
f => f
é similar afunction(f){ return f; }
Tão perto, mas não exatamente o que você esperava.
* - como foi apontado nos comentários, existem diferenças sutis, mas para o bem da sua pergunta, não acho que sejam particularmente relevantes. Eles são muito relevantes em outras situações.
fonte
f => f
efunction(f) { return f; }
:)new (f => f)
arremessos, tem um diferentetoString
e por algum motivo não consigo grocar(f => f).arguments
arremessos no Chrome, mas não no FF ou no Edge.this
também é diferente. (embora a diferença possa não ser observável sethis
não aparecer no corpo da função ... Não tenho certeza)f => f
é o função de identidade . Ele simplesmente retorna o argumento que foi passado.Esta função é freqüentemente usada como um valor padrão para processos de transformação, uma vez que não realiza nenhuma transformação.
Não. A função vazia não retorna nada. A função de identidade retorna o argumento passado.
fonte
Se você quiser saber o que
f => f
significa, o lado esquerdo é o parâmetro e o lado direito é o valor de retorno. Portanto, por exemplof => f*2
, é equivalente a:O código que você descreve retorna tudo o que é fornecido a ele como entrada.
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
fonte
Outros já mencionaram o que
f => f
significa, então não vou me aprofundar nisso. Vou apenas explicar o resto da função, porque há uma pequena diferença entref => f
e__DEV__ ? devTools() : f => f
O operador ternário verifica se
__DEV__
é um valor verdadeiro e, em caso afirmativo, retorna a funçãodevTools()
. caso contrário, ele retorna a função de identidadef => f
que não faz nada. Colocado de outra forma: este código permite algumas funções do modo de desenvolvimento. Sem o código restante, é difícil dizer o que esse modo adiciona, mas presumivelmente, ele permitirá algumas informações extras de registro e menos ofuscação.fonte
__DEV__ ? devTools() : f => f
não atribui nada af
. Você deixou algo de fora do exemplo de código?A qualquer momento com o dilema semelhante, você pode usar Babel para obter a resposta.
Retornou assim:
BTW, => você usou é o recurso ES6 chamado expressão de seta . A outra expressão de interesse
seria convertido para:
Como as expressões da função de seta são sempre anônimas , faz sentido adicionar o nome à função:
iria converter para
fonte