Ver Mensaje Individual
  #8 (permalink)  
Antiguo 27/05/2013, 08:23
Avatar de marlanga
marlanga
 
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: cual es la mejor forma de crear una funcion?

Sólo hay una diferencia entre las funciones declaradas y las funciones expresadas, la culpa es el modo en el que los motores javascript funcionan.

Lo primero que hace un motor de javascript es almacenar en la caché el código entero, sin ejecutarlo. Cuando lo tiene todo en memoria, lo ejecuta. Pero no secuencialmente, antes ejecuta primero todas las funciones y expresiones declarativas.

Después, ejecutara secuencialmente el resto del código.

Así que si llamas a una función declarada definida mucho después en el código, funcionarán.

Por el contrario, si llamas a una función expresada que está definida después, el motor de javascript lanzará un error o un undefined, según el motor de javascript usado.


Un ejemplo:

Código Javascript:
Ver original
  1. if (funcionDeclarada) alert(funcionDeclarada()+" antes");
  2. if (funcionExpresada) alert(funcionExpresada()+" antes");
  3.  
  4. function funcionDeclarada(){
  5.     return "funcion declarada";
  6. }
  7. var funcionExpresada=function(){
  8.     return "funcion expresada";
  9. }
  10.  
  11. alert(funcionDeclarada()+" despues");
  12. alert(funcionExpresada()+" despues");

http://jsfiddle.net/9ZmkZ/


También habeis echo referencia a cúal es la diferencia entre estas dos formas de declarar variables:

Código Javascript:
Ver original
  1. var variable1=5;
  2. variable2=5;

Pues hay una tremenda diferencia. La primera, usando VAR hará que esa variable sólo exista en el CLOSURE donde está declarada, que es una especie de ámbito de existencia de las variables y funciones, parecido pero no igual a lo que en otros lenguajes se llama "ámbito local".

La segunda forma, lo que hace es crear un atributo al objeto WINDOW que es el padre de todo el código que creemos en javascript. En ese caso, hemos creado un window.variable2 con el valor de 5, y dicho valor será accesible en todas partes.

Última edición por marlanga; 27/05/2013 a las 08:35