El operador ! es el operador de negación. Algunas veces se utiliza antes de la keyword function para convertirla en una function expression. Si le añades paréntesis se produce la llamada a la función retornando true (porque las function expression llamadas de esta forma retornan undefined y el operador ! (not) retorna un booleando con el valor contrario al especificado. Es decir, si era valor positivo pasa a negativo y si era negativo pasa a positivo. Ej:
La función:
function saludar() { alert("Hola") }
Puedes crearla e invocarla con:
!function saludar() { alert("Hola") }();
La forma más frecuente de realizar esto es utilizando la sintaxis:
(function saludar() { alert("Hola") })();
Utilizando el ! se ahorra un caracter, pero esta forma de hacerlo si retorna el valor de retorno de la función. Si le sumas que puedes utilizar la sintaxis de function arrow de ES6+:
alert( (() => 5 * 5)() );
suma( (numero => numero * 5)(), 8);
suma( (numero => numero * 5)(), (otroNumero => numero * 7)() );
Suele ser bastante práctico para usar como parámetros de otras funciones, crear closures, encapsular el scope, ahorrar código...
La función:
function saludar() { alert("Hola") }
Puedes crearla e invocarla con:
!function saludar() { alert("Hola") }();
La forma más frecuente de realizar esto es utilizando la sintaxis:
(function saludar() { alert("Hola") })();
Utilizando el ! se ahorra un caracter, pero esta forma de hacerlo si retorna el valor de retorno de la función. Si le sumas que puedes utilizar la sintaxis de function arrow de ES6+:
alert( (() => 5 * 5)() );
suma( (numero => numero * 5)(), 8);
suma( (numero => numero * 5)(), (otroNumero => numero * 7)() );
Suele ser bastante práctico para usar como parámetros de otras funciones, crear closures, encapsular el scope, ahorrar código...