Sinal de adição de JavaScript na frente do nome da function

Eu tenho procurado informações sobre funções de auto-invocação, e em algum lugar eu tropecei nessa notação:

+function(){} 

Alguém pode me explicar o que significa o sinal + na frente da function?

   

Força o analisador a tratar a parte que segue o + como uma expressão. Isso geralmente é usado para funções que são chamadas imediatamente, por exemplo:

 +function() { console.log("Foo!"); }(); 

Sem o + lá, se o analisador estiver em um estado em que esteja esperando uma instrução (que pode ser uma expressão ou várias instruções de não expressão), a function palavra se parece com o início de uma declaração de function em vez de uma expressão de function e () seguir (aqueles no final da linha acima) seria um erro de syntax (assim como a ausência de um nome, naquele exemplo). Com o + , ele torna uma expressão de function, o que significa que o nome é opcional e resulta em uma referência à function, que pode ser invocada, portanto, os parênteses são válidos.

+ é apenas uma das opções. 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):

 (function() { console.log("Foo!"); })(); // or (function() { console.log("Foo!"); }()); 

A subsidiária da resposta da @ TJCrowder, + é geralmente usada para forçar a conversão numérica de um valor, conforme esta resposta de SO explica . Neste caso, é chamado de ‘unary plus operator’ (para facilitar o googling).

 var num = +variant; 

Portanto, na frente de uma function, pode ser uma maneira de forçar o resultado da function a ser interpretado como um número. Eu duvido que isso aconteça ainda, mas teoricamente o JIT poderia usar isso para compilar a function como uma function somente numérica, etc. No entanto, para evitar que o unary plus fosse uma concatenação quando usado em uma expressão maior, você precisaria de parênteses:

 blah + (+(function(){ var scope; return "4"; })()); 

Portanto, a resposta curta é que ela impede um erro de syntax, usando os resultados da function de uma maneira ou de outra.

Você também pode instruir o mecanismo de que não está interessado no valor de retorno usando o operador void :

 void function() { console.log("Foo!"); }(); 

Claro, colocar chaves ao redor da coisa toda também serve a esse propósito.