Javascript más el signo delante del nombre de la función

Estaba buscando información sobre las funciones de autoencendido, y en algún lugar me encontré con esta designación:

 +function(){} 

¿Puede alguien explicarme qué significa / hace el signo + delante de la función?

785
12 нояб. fijado por jOpacic 12 nov. 2012-11-12 13:06 '12 a las 13:06 2012-11-12 13:06
@ 3 respuestas

Esto hace que el analizador trate la parte siguiente + como una expresión. Esto generalmente se usa para funciones que se llaman inmediatamente, por ejemplo:

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

Sin un + allí, si el analizador está en el estado en el que el operador espera (que puede ser una expresión o varios operadores sin una expresión), la palabra function parece al comienzo de la declaración de la función, y cuál es la expresión de la función, y por lo tanto () , la siguiente (esas que están al final de la línea anterior) será un error de sintaxis (como la falta de un nombre en este ejemplo). Usando + lo hace con una expresión de función, lo que significa que el nombre es opcional y que lleva a una referencia a la función a la que se puede llamar, por lo que los paréntesis son válidos.

+ - Esta es solo una de las opciones. También puede ser - ! , ~ o casi cualquier otro operador unario. Alternativamente, puede usar paréntesis (esto es más común, pero no más o menos correctamente sintácticamente):

 (function() { console.log("Foo!"); })(); // or (function() { console.log("Foo!"); }()); 
1235
12 нояб. La respuesta es dada por TJ Crowder el 12 de noviembre. 2012-11-12 13:07 '12 a las 13:07 2012-11-12 13:07

El sistema hijo para la respuesta @TJCrowder, + usa generalmente para forzar una conversión numérica del valor como se explica por SO . En este caso, se le llama "unary plus" (para mayor comodidad de búsqueda).

 var num = +variant; 
border=0

Por lo tanto, antes de una función, puede ser una forma de forzar el resultado de una función para que se interprete como un número. Dudo que vuelva a suceder, pero en teoría el JIT puede usar esto para compilar una función como una función con un valor numérico, etc. Sin embargo, para evitar la ventaja unaria, que es una concatenación cuando se usa en términos más amplios, necesita paréntesis:

 blah + (+(function(){ var scope; return "4"; })()); 
85
12 нояб. La respuesta la da Phil H el 12 de noviembre. 2012-11-12 13:54 '12 a las 13:54 2012-11-12 13:54

Así que la respuesta corta es que evita el error de sintaxis al usar la función de todos modos.

También puede indicar al motor que ni siquiera está interesado en el valor de retorno usando el operador void :

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

Por supuesto, el uso de esta forma también sirve para este propósito.

49
16 нояб. La respuesta es dada por Ja͢ck el 16 de noviembre. 2012-11-16 19:45 '12 a las 7:45 pm 2012-11-16 19:45

Otras preguntas sobre las etiquetas de o una pregunta