Signo más de JavaScript delante de la expresión de la función

6 minutos de lectura

Signo mas de JavaScript delante de la expresion de la
jOpacic

He estado buscando información sobre las funciones invocadas de inmediato, y en algún lugar me topé con esta notación:

+function(){console.log("Something.")}()

alguien me puede explicar que es + signo delante de la función significa/hace?

  • Ben Alman lo explica todo aquí: mths.be/iife

    – Mathias Bynens

    13 de noviembre de 2012 a las 18:36

  • relacionado: ¿Qué hace el signo de exclamación antes de la función?

    – Bergi

    20 de agosto de 2014 a las 11:39

Signo mas de JavaScript delante de la expresion de la
TJ Crowder

Obliga al analizador a tratar la parte que sigue a la + como expresión. Esto generalmente se usa para funciones que se invocan inmediatamente, por ejemplo:

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

Sin el + allí, si el analizador se encuentra en un estado en el que espera una declaración (que puede ser una expresión o varias declaraciones que no son expresiones), la palabra function parece el comienzo de una función declaración en lugar de una función expresión y así el () seguirlo (los que están al final de la línea de arriba) sería un error de sintaxis (como lo sería la ausencia de un nombre, en ese ejemplo). Con los +la convierte en una expresión de función, lo que significa que el nombre es opcional y 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 casi cualquier otro operador unario. Alternativamente, puede usar paréntesis (esto es más común, pero ni más ni menos correcto sintácticamente):

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

  • Más elaboración está aquí, benalman.com/noticias/2010/11/…

    – Kundan Singh Chouhan

    12 de noviembre de 2012 a las 10:14

  • ¿No podemos decir que el envoltorio de paréntesis es una notación superior? Estoy MUY familiarizado con los paréntesis que sirven para abarcar expresiones. No está claro en absoluto qué está haciendo + en este caso si aún no conoce esta peculiaridad arcana de js.

    – Chris

    13 de noviembre de 2012 a las 19:03

  • Nota: De las dos opciones de padres, jsLint prefiere el segundo. creo jsPista es menos quisquilloso.

    – Remolacha-Remolacha

    11 de agosto de 2013 a las 23:21

  • Una de las bibliotecas de uso común que utiliza la notación “más” es Oreja (que es como terminé leyendo este hilo).

    – Ciudad

    21/10/2014 a las 21:57

  • Bootstrap está haciendo esto, por cierto: maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.js

    – AlexGrafe

    26/10/2014 a las 11:01


Signo mas de JavaScript delante de la expresion de la
phil h

Subsidiaria de la respuesta de @TJCrowder, + generalmente se usa para forzar la conversión numérica de un valor como explica esta respuesta SO. En este caso, se 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 solo numérica, etc. Sin embargo, para evitar que unario más sea una concatenación cuando se usa en una expresión más grande, necesitaría paréntesis:

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

  • ¿Cómo consiguió esto 37 votos a favor? los (+function() { ... })() la notación nunca puede ejecutarse sin errores (aparte del hecho de que esto no responde la pregunta).

    – quark blanco

    15 de noviembre de 2012 a las 21:21


  • @whitequark: se perdió un par de llaves alrededor de la función + llamada. Sospecho que los votos a favor se debieron más a la explicación de la emisión de números.

    – Phil H.

    15 de noviembre de 2012 a las 22:46

  • OK, podría haber sido quisquilloso.

    – quark blanco

    16 de noviembre de 2012 a las 13:13

  • @Christoph Me inclinaría a dejar esos corchetes allí. De hecho, iría tan lejos como para agregarlos si faltaran. Hace mucho más claro lo que está pasando y también evita problemas cuando el código se minimiza eliminando los espacios, lo que lleva a 3++function... que no es lo mismo.

    – benjam

    20 de noviembre de 2013 a las 17:41

  • Aunque en una reflexión más profunda, el +function... es innecesario en sí mismo. El mismo resultado se puede obtener con blah + function( ){ ... }( ); lo que negaría la necesidad de los soportes de envoltura.

    – benjam

    20 de noviembre de 2013 a las 17:47

Entonces, la respuesta corta es que evita un error de sintaxis, al usar los resultados de la función de una forma u otra.

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

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

Por supuesto, poner frenos alrededor de todo también sirve para ese propósito.

  • Vacío o paréntesis son inmensamente preferible. Están libres de WTF. Usar + es el tipo de inteligencia que no es muy inteligente.

    -Peter Wone

    16 de marzo de 2015 a las 10:08

  • Un buen punto. Parece que el uso de uno de los operadores iría en contra de lo que actualmente es el estándar de la industria. Tal vez los desarrolladores de “chicos geniales” optarían por él, de lo contrario, todavía no veo el punto de usar algo en lugar de void o ()

    – amigo

    9 de noviembre de 2015 a las 23:51

Solución y Orígenes

los + firmar antes de la función, en realidad llamada más unario y es parte de un grupo llamado Operadores unarios y (el Unary Plus) se usa para convertir cadenas y otras representaciones en números (enteros o flotantes).

Una operación unaria es una operación con un solo operando, es decir, una sola entrada. Esto contrasta con las operaciones binarias, que utilizan dos operandos.

Usos básicos:

const x = "1";
const y = "-1";
const n = "7.77";

console.log(+x);
// expected output: 1

console.log(+n);
// expected output: 7.77

console.log(+y);
// expected output: -1

console.log(+'');
// expected output: 0

console.log(+true);
// expected output: 1

console.log(+false);
// expected output: 0

console.log(+'hello');
// expected output: NaN

Cuando el + el signo se coloca antes de una variable, función o cualquier representación de cadena devuelta, la salida se convertirá en un número entero o flotante; el operador unario (+) convierte también los valores que no son cadenas true, falsey null.

Usos avanzados

La forma correcta de usar la función que mencionaste anteriormente será:

+function(){return "3.141"}()
// expected output: 3.141

me encanta usar + convertir un new Date() objetar a un marca de tiempoMe gusta esto:

+new Date()
// expected output: 1641387991035

Otros operadores unarios

- El operador de negación unario convierte su operando al tipo Número y luego lo niega.

~ Operador NOT bit a bit.

! Operador lógico NOT.

delete El operador de eliminación elimina una propiedad de un objeto.

void El operador void descarta el valor de retorno de una expresión.

typeof El operador typeof determina el tipo de un objeto dado.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad