Javascript: Diferencias entre declaración de función y expresión con función

Algo que me resultó un poco confuso cuando empecé a jugar con Javascript fueron las diferentes formas que fui encontrando de “crear” funciones. En ejemplos hechos con node.js, es muy frecuente ver esta sintaxis:

exports.add = function(a, b) {
   return a+b;
};

Por otra parte, lo que yo conocía como forma “estándar” de crear funciones era algo así:

function getSquare (num) {
   squareNum = num * num;
   return (squareNum);
}

Después de ver esto, me surgió la duda más comprensible: ¿cuál es la diferencia? ¿qué forma debo usar? Un poco de Google más tarde…

Una declaración de función es:

function sum(a,b) {
   return a + b;
}

La declaración de una función la hace disponible para todo el programa, incluyendo el código que está antes de la declaración de la función, igual que pasa con un método o una clase en C#. Por ejemplo, esto es válido:

var a = sum(1,2);

function sum(a,b) {
   return a + b;
}

Una expresión con una función es:

var sum = function(a,b) {
   return a + b;
};

En este caso, estamos declarando un función y asignándosela a una variable. Es similar a declarar una expresión lambda en C#. No es posible referenciarla antes de la expresión, porque realmente no se trata de una función declarada, sino del valor asignado a una variable y, por tanto, hasta que no se defina la variable no se puede utilizar.

Una diferencia más. En el segundo caso (usar una función en una expresión) es necesario terminar la expresión con un punto y coma (;), igual que cualquier otra expresión.

Como decía más arriba, esto lo averigüé después de dar un paseo por Google. Si alguien quiere más detalles, puede encontrarlos aquí: http://kangax.github.com/nfe/

5 comentarios en “Javascript: Diferencias entre declaración de función y expresión con función

  1. buen dato efectivamente de igual manera me percate de este tipo de codigo en ejemplo que pusiste la expresioin define una funcion anonima y el valor de la variable seria suma = sum(2,6);
    ves ya aprendi jajaj hasta pronto.

Comentarios cerrados.