Estive procurando informações sobre funções imediatamente invocadas e em algum lugar me deparei com essa notação:
+function(){console.log("Something.")}()
Alguém pode me explicar o que +
significa / faz o sinal na frente da função?
Estive procurando informações sobre funções imediatamente invocadas e em algum lugar me deparei com essa notação:
+function(){console.log("Something.")}()
Alguém pode me explicar o que +
significa / faz o sinal na frente da função?
Respostas:
Força o analisador a tratar a parte que segue
+
como expressão. Isso geralmente é usado para funções que são chamadas imediatamente, por exemplo:Sem o
+
lá, se o analisador estiver em um estado em que espera uma instrução (que pode ser uma expressão ou várias instruções de não expressão), a palavrafunction
parecerá o início de uma declaração de função em vez de uma expressão de função e, portanto, a()
seguinte (os que estão no final da linha acima) seriam um erro de sintaxe (assim como a ausência de um nome, nesse exemplo). Com o+
, torna-o uma expressão de função, o que significa que o nome é opcional e resulta em uma referência à função, que pode ser chamada, para que os parênteses sejam válidos.+
é apenas uma das opções. Ele também pode ser-
,!
,~
, ou apenas sobre qualquer outro operador unário. Como alternativa, você pode usar parênteses (isso é mais comum, mas nem mais nem menos correto, sintaticamente):fonte
Subsidiária da resposta do @ TJCrowder,
+
geralmente é usada para forçar a conversão numérica de um valor, conforme explica essa resposta do SO . Nesse caso, ele é chamado de "operador unário +" (para facilitar a busca no Google).Portanto, na frente de uma função, pode ser uma maneira de forçar o resultado da função a ser interpretado como um número. Duvido que isso aconteça ainda, mas teoricamente o JIT poderia usar isso para compilar a função como uma função apenas numérica etc. No entanto, para impedir que o unário mais seja uma concatenação quando usado em uma expressão maior, você precisará de parênteses:
fonte
(+function() { ... })()
notação nunca pode ser executada sem erros (além do fato de que isso não responde à pergunta).3++function...
que não seja o mesmo.+function...
por si só é desnecessário. O mesmo resultado pode ser obtido com oblah + function( ){ ... }( );
que negaria a necessidade dos suportes de embalagem.Portanto, a resposta curta é que ela evita um erro de sintaxe, usando os resultados da função de uma maneira ou de outra.
Você também pode instruir o mecanismo de que nem sequer está interessado no valor de retorno usando o
void
operador:Obviamente, colocar aparelhos em volta da coisa toda também serve a esse propósito.
fonte