Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/09/2009, 09:37
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 10 meses
Puntos: 1485
Respuesta: Quiero retrasar un Popup

tambien es valida de la forma tradicional. es decir, pasando las instrucciones como en un string. o sea,
Código:
setTimeout("promptWelcome('preFIXE_Media/welcome_page.png'); /*mas expresiones*/ expresion1; expresion2; /*etc...*/", 5000);
¿donde realmente esta la diferencia? aunque ambas soluciones son validas, realmente tienen sus diferencias y me atreveria a decir quien lleva mas ventaja es la opcion de la funcion anonima. setTimeout, al igual que setInterval, evaluan la expresiones cuando el argumento es un string. o sea, hace exactamente lo mismo como si usaramos eval para evaluar un string como si fuese expresiones de javascript. sin embargo, en el caso de la funcion es distinto. en este caso lo que realmente estamos haciendo es pasar una funcion como argumento y la funcion setTimeout simplemente llama a esa funcion.

se dice que eval es evil, o sea, que es demasiado dañino. honestamente no sabria decirte si se refiere en cuanto a rendimiento o seguridad, pienso que es el primero. si eval es dañino tambien lo es el argumento de setTimeout cuando se pasa como string. por otro lado, eval siempre evalua la expresion en el contexto del objeto window y lo mismo sucede setTimeout. lo que quiere decir es que el scope (un mecanismo que maneja la visibilidad y vida de las variables) de la expresion a evaluar se ejecuta como si las expresiones aparecieran directamente en el codigo fuente, sin estar dentro de una funcion u objeto.

cuando usamos la funcion anonima, sucede el mismo contexto, lo unico que se crea lo que se conoce como closure. mas o menos lo que significa es "atrapar la visiblidad de las variables de una funcion" con el proposito de poder utilizarlas aunque la funcion no se utilice en el mismo contexto donde esta definida dicha funcion. en tu caso no se refleja este efecto por lo que de momento no tienes que darle tanta importancia a este detalle. para futura refencia te recomiendo que busques por google por los terminos "javascript funcion closure".
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.