Una función en javascript

Iniciado por Diesan Romero, 15 Mayo 2017, 16:48 PM

0 Miembros y 1 Visitante están viendo este tema.

Diesan Romero

Una vez vi en javascript algo así:

Código (javascript) [Seleccionar]
! function(){}();

Y hasta el día de hoy no entiendo nada.

#!drvy

#1
Es una funcion que se ejecuta a si misma (opcionalmente, con los parámetros que le des).

Código (javascript) [Seleccionar]
var a = function(){
   return 'hola';
}();


var b = function(a,b){
   return a-b;
}(5,3);

console.log(a); // hola
console.log(b); // 2


PD: Si te preguntas por el uso que se le pueda dar,
http://stackoverflow.com/questions/17058606/why-using-self-executing-function

Saludos

erandros

Hora de demistificar:

Primero, estemos de acuerdo en que en javascript, podés declarar una función sin nombre.

Código (javascript) [Seleccionar]
function() { console.log('asd'); }
Podés, si querés, asignarla a una variable e invocar esa función luego
Código (javascript) [Seleccionar]

var myFunction = function() { console.log('asd'); }
myFunction();


Pero también, en el mundo libre de javascript, podés hacer cosas locas, como declarar una función sin nombre, e invocarla inmediatamente, esto es exactamente igual que el ejemplo anterior (sin el console.log) pero en una línea:

Código (javascript) [Seleccionar]
function(){}()

Lamentablemente, ese código no corre, por ciertas cuestions de sintaxis de javascript, para que corra tenés dos opciones:

Código (javascript) [Seleccionar]
(function(){})() //envolver la declaración de la función entre paréntesis
Código (javascript) [Seleccionar]
!function(){}() //anteponer un signo de exclamación

Ahora...

Por qué querrías declarar una función y llamarla inmediatamente? Por qué no poner el código así nomás en un script de html total se va a invocar de una.

Por una cuestión de prolijidad. Cuando definís una variable fuera de cualquier función, es visible globalmente. Cualquier otra parte del código puede acceder a esa variable. Y eso puede hacer que tu código sea poco robusto.

Pero, oh magia, cuando ponés variables dentro de funciones, esas variables solo se pueden acceder dentro de esas funciones. Y eso nos ayuda a modularizar el código.


dato000

Cita de: magodiesan en 15 Mayo 2017, 16:48 PM
Una vez vi en javascript algo así:

Código (javascript) [Seleccionar]
! function(){}();

Y hasta el día de hoy no entiendo nada.

Debe ser una función recursiva, son horrendas, no entiendo los que dicen que son recomendables en terminos de rendimiento, sea en el lenguaje que sea, son demoledores para comer memoria así sea solo para una simple suma o imprimir un string.

No uses esa basura, ni te molestes en estudiarla, es mala praxis, y una perdida de tiempo y energia.