Foros del Web » Programando para Internet » Javascript »

Alguien podría explicar que hace este código por favor "(function(){})()"

Estas en el tema de Alguien podría explicar que hace este código por favor "(function(){})()" en el foro de Javascript en Foros del Web. Como dice el título en varios códigos he visto esta linea con alguna cosa dentro de {} claro pero no sé como se utiliza (function(){})(); ...
  #1 (permalink)  
Antiguo 15/02/2010, 18:09
 
Fecha de Ingreso: mayo-2008
Mensajes: 18
Antigüedad: 15 años, 11 meses
Puntos: 0
Alguien podría explicar que hace este código por favor "(function(){})()"

Como dice el título en varios códigos he visto esta linea con alguna cosa dentro de {} claro pero no sé como se utiliza

(function(){})();


de antemano muchas gracias
  #2 (permalink)  
Antiguo 15/02/2010, 19:04
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Alguien podría explicar que hace este código por favor "(function(){})()"

esa porcion crea una funcion literal o anonima e la invoca inmediatamente. al final, no existe trazo de dicha funcion porque dicha funcion literal no es almacenada en una variable o propiedad. es decir,
Código:
// funcion anonima;
function(){
// otros codigo;
}
si queremos invocar dicha funcion, tenemos que incluir los pares de parentesis al final
Código:
function(){
// otros codigo;
}() 
sin embargo, javascript indicara error de sintaxis porque entiende que no se ha formado correctamente la expresion. por esa razon, si la funcion no se va almacenar en una variable, se encierra la funcion literal dentro de un par de parentesis.
Código:

(function(){
// otros codigo;
})()
el parentesis retiene temporeramente el valor devuelto por dicha expresion que envuelve, en este caso la funcion literal. tienes que pensarlo como en la algebra: primero resolvemos los problemas dentro de parentesis y al final ese parentesis devuelve un solo valor. aqui es lo mismo, javascript primero interpreta la funcion antes de invocarla y al final devuelve una funcion. no confundas el ultimo par de parentesis, este ultimo significa invocacion porque le sigue a una funcion.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 15/02/2010 a las 19:33 Razón: error gramatical
  #3 (permalink)  
Antiguo 15/02/2010, 19:11
 
Fecha de Ingreso: mayo-2008
Mensajes: 18
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Alguien podría explicar que hace este código por favor "(function(){})()"

muchas gracias zerokilled, ahora la razón porque no queremos que se deje rastro es unicamente para no gastar mas memoria? o hay otra razón?
  #4 (permalink)  
Antiguo 15/02/2010, 19:31
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Alguien podría explicar que hace este código por favor "(function(){})()"

no creo que sea por gastar memoria. en mi opinion ambas formas consumen la misma memoria, solo que en esta tecnica al final la memoria consumida es liberada. puede haber varias razones, las que me parecen son: no dejar rastro de dicha funcion para que el usuario no la invoque, y posiblemente crear closure. puede haber otras razones...
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: favor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:25.