javascript - tipos - title css
JavaScript más el signo delante del nombre de la función (3)
He estado buscando información sobre las funciones de auto-invocación, y en algún lugar me topé con esta notación:
+function(){}
¿Puede alguien explicarme lo que significa / hace el signo +
delante de la función?
Entonces, la respuesta corta es que evita un error de sintaxis, al usar los resultados de la función de una manera u otra.
También puede indicar al motor que ni siquiera está interesado en el valor de retorno utilizando el operador void
:
void function() { console.log("Foo!"); }();
Por supuesto, poner llaves alrededor de todo esto también sirve para ese propósito.
Obliga al analizador a tratar la parte que sigue a +
como una expresión. Esto generalmente se usa para funciones que se invocan inmediatamente, por ejemplo:
+function() { console.log("Foo!"); }();
Sin el signo +
allí, si el analizador está en un estado en el que está esperando una declaración (que puede ser una expresión o varias declaraciones sin expresión), la palabra function
parece al principio de una declaración de función en lugar de una expresión de función y, por lo tanto, ()
Seguirlo (los que están al final de la línea anterior) sería un error de sintaxis (como lo haría la ausencia de un nombre, en ese ejemplo). Con el +
, la convierte en una expresión de función, lo que significa que el nombre es opcional y que da como resultado una referencia a la función, que se puede invocar, por lo que los paréntesis son válidos.
+
es solo una de las opciones. También puede ser -
!
, ~
, o cualquier otro operador unario. Alternativamente, puede usar paréntesis (esto es más común, pero ni más ni menos correctamente sintácticamente):
(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());
Subsidiaria a la respuesta de @ TJCrowder, +
generalmente se usa para forzar la conversión numérica de un valor como lo explica esta respuesta SO . En este caso, se le llama el "operador más unario" (para facilitar la búsqueda en Google).
var num = +variant;
Entonces, frente a una función, puede ser una forma de forzar que el resultado de la función se interprete como un número. Dudo que suceda todavía, pero teóricamente el JIT podría usar eso para compilar la función como una función numérica solamente, etc. Sin embargo, para evitar que unary plus sea una concatenación cuando se usa en una expresión más grande, necesitarías paréntesis:
blah + (+(function(){ var scope; return "4"; })());