Foros del Web » Programando para Internet » Javascript »

no entiendo esta declaracion de funcion (crazy)

Estas en el tema de no entiendo esta declaracion de funcion (crazy) en el foro de Javascript en Foros del Web. hola chicos he visto mucho estas funciones todas como locas para mi y las entiendo pero a mi modo y pues me gustaria si alguno ...
  #1 (permalink)  
Antiguo 23/07/2013, 16:43
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
no entiendo esta declaracion de funcion (crazy)

hola chicos he visto mucho estas funciones todas como locas para mi y las entiendo pero a mi modo y pues me gustaria si alguno de uds me la explica mejor:
Código Javascript:
Ver original
  1. var imagen=(function(e){
  2.    return function(a){//  a  es e?  osea la de arriba y una funcion que retorna otra funcion?
  3.          
  4.    }
  5. })(f)// paar que sirve este otro que esta aca?

la verdad me cuesta un poco chicos javascript no tiene comparacion ya lo estoy empezando a entender pero ahi cosas que todabia me dejan @_@

Otra cosa como hago para llamar esas funciones bn?

Código Javascript:
Ver original
  1. imagen(5); // es un ajemplo no necesariamente ahi va un número

me gustaria entenderlas para mas adelante usarlas

gracias
  #2 (permalink)  
Antiguo 23/07/2013, 18:05
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: no entiendo esta declaracion de funcion (crazy)

Bueno, ese ejemplo que hace es, ejecutar una función anónima al asignar una variable, y esta función regresa otra función (lo que se conoce comúnmente como un closure):

Código Javascript:
Ver original
  1. function funcioncita(e) {
  2.   return function(a) {
  3.     console.log(a * e);
  4.   };
  5. };
  6.  
  7. var funcionsota = funcioncita(10);
  8.  
  9. funcionsota(2); // Imprime 20
  10. funcionsota(3); // Imprime 30

Ese código es similar al que tienes, solo el uso de la función anónima te puede despistar.

Saludos
__________________
Grupo Telegram Docker en Español

Última edición por zerokilled; 23/07/2013 a las 18:39
  #3 (permalink)  
Antiguo 23/07/2013, 19:48
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: no entiendo esta declaracion de funcion (crazy)

si es que jummm he visto unos peores que queda uno -_-

sabras una pagina que explique bn las declaraciones de funciones anonimas por que yo se usarlas pero en JQUERY y aca en javascript es un poco mas diferente aunque es lo mismo se puede decir
  #4 (permalink)  
Antiguo 23/07/2013, 20:02
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: no entiendo esta declaracion de funcion (crazy)

buenas...
antes de responderte al tema en concreto, muestranos un ejemplo de una función anónima en jquery que sea diferente en javascript. porque honestamente no hay diferencia entre uno y otro. de hecho, cuando haces una función anónima para jquery, en esencia estas escribiendo puro javascript.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 24/07/2013, 10:28
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: no entiendo esta declaracion de funcion (crazy)

No sé si tu problema es con la función autoejecutable o con el closure, puedes leer estos links:

http://www.etnassoft.com/2011/09/02/...en-javascript/
http://www.etnassoft.com/2011/03/14/...en-javascript/
https://developer.mozilla.org/es/doc...Guide/Closures
http://www.variablenotfound.com/2012...ndelos-de.html

Saludos
__________________
Grupo Telegram Docker en Español

Última edición por Carlangueitor; 24/07/2013 a las 18:31
  #6 (permalink)  
Antiguo 24/07/2013, 11:10
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: no entiendo esta declaracion de funcion (crazy)

El término correcto no es 'autoejecutable' sino 'ejecutada inmediatamente'

De hecho, se las llama IIFE -> Immediately-Invoked Function Expression
__________________
blog | @aijoona
  #7 (permalink)  
Antiguo 24/07/2013, 18:59
Avatar de sonickseven  
Fecha de Ingreso: diciembre-2012
Ubicación: bogota
Mensajes: 404
Antigüedad: 11 años, 4 meses
Puntos: 2
Respuesta: no entiendo esta declaracion de funcion (crazy)

je je ej eso es lo bonito de javascript por ejemplo como se declara una funcion como esta:
Código Javascript:
Ver original
  1. // jquery ejemplo
  2.  
  3. $('#tag').hola(200); // he visto estas funciones y no se como se declaran y me gustariaa saber :D
  4. //una funcion normal seria
  5. var suma=hola(a,b); // que por defecto sabemos como se declaro lo que ella haga es otra cosa
  6.  
  7. function hola(c,d){
  8.      return c+d;
  9. }
  10.  
  11. console.log(suma);  // de verdad que si todabia me falta mucho por aprender de javascript!!

y eso hay es pero muchas formas de crear una funcion pero yo solo me se las dos basicas
  #8 (permalink)  
Antiguo 24/07/2013, 19:26
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: no entiendo esta declaracion de funcion (crazy)

¡no tiene tanto misterio! analizando los operadores de una sentencia por si solo, te haces una idea de que es cada cosa porque los operadores trabaja con ciertos tipos de datos. en el ejemplo de jquery, los operadores son: invocación de función y accesor de miembros. cuando se invoca la función, devuelve un objeto que a su vez tiene un método y se invoca. entonces, en puro javascript es cuestión de crear una funcion que devuelva un objeto con un método e invocarlo.

Código:
function fn(){
return {foo: function(){ console.log('foo method'); }};
}

fn().foo();
fn('#tag').foo(200); // o si lo quieres con argumentos aunque en este ejemplo particular no tiene ningún uso ;
evidentemente se puede adaptar la función para que haga algo con argumentos, pero no es el motivo del tema, sino demostrar que no tiene ninguna diferencia entre javascript y jquery. lo que sucede con las librerías es que te cambian un poco la forma de usar javascript.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: declaracion, funcion
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 03:20.