Estoy en una opinión diferente con la mayoría de la gente aquí. Técnicamente esta sintaxis puede significar lo mismo para declarar funciones en ambos sentidos (que destacan incorrecta en mi última declaración. He leído en un poste diff por qué son técnicamente diff y voy a añadir, al final, ¿por qué) ; pero la forma en que juegan un papel en la evolución de los patrones es masiva. Recomiendo encarecidamente "Javascript: The Good Parts" de Doughlas Crockford.
Pero para demostrar mi punto de una manera sutil y simple; aquí hay un pequeño ejemplo.
//Global function existing to serve everyone
function swearOutLoud(swearWord) {
alert("You "+ swearWord);
}
//global functions' territory ends here
//here is mr. spongebob. He is very passionate about his objects; but he's a bit rude.
var spongeBob = {
name : "squarePants",
swear : function(swearWord) {
name = "spongy";
alert("You "+ swearWord);
return this;
}
}
//finally spongebob learns good manners too. EVOLUTION!
spongeBob.apologize = function() {
alert("Hey " + this.name + ", I'm sorry man!");
return this;
}
//Ask spongebob to swear and then apologize in one go (CASCADING EFFECT!!)
alert(spongeBob.swear("twit").apologize());
Si mira el código anterior, he declarado una función con el nombre swearOutLoud. Que tomaría una maldición de cualquier objeto o una llamada y le dará la salida. Puede hacer operaciones en cualquier objeto usando el parámetro "this" que se le pasa y los argumentos.
Sin embargo, la segunda declaración se declara como un atributo del objeto llamado "spongeBob". Esto es importante tener en cuenta; como aquí me estoy moviendo hacia un comportamiento orientado a objetos. Mientras también mantengo el "efecto de cascada", devuelvo "esto" si no tengo nada más que devolver.
Algo similar se hace en jquery; y este patrón en cascada es importante si estás tratando de escribir un marco o algo así. Lo vinculará al patrón de diseño de Builder también.
Pero con las funciones declaradas como atributos de un objeto, puedo lograr un comportamiento centrado en el objeto que conduce a un mejor paradigma de programación. A menos que esté bien diseñado; las funciones individuales declaradas fuera con acceso global conducen a una forma de codificación no orientada a objetos. De alguna manera prefiero lo último.
Para ver la cascada en efecto, mira la última declaración en la que puedes pedirle a spongebob que jure y se disculpe de inmediato; aunque se haya agregado una disculpa como atributo más adelante.
Espero aclarar mi punto. La diferencia desde una perspectiva técnica puede ser pequeña; pero desde el punto de vista del diseño y la evolución del código, es enorme y hace una gran diferencia.
¡Pero eso soy yo! Tómelo o déjelo. :)
EDIT:
Así tanto las llamadas son técnicamente diferentes; porque una declaración con nombre está vinculada al espacio de nombres global y se define en el tiempo de análisis. Entonces se puede llamar incluso antes de declarar la función.
//success
swearOutLoud("Damn");
function swearOutLoud(swearWord) {
alert("You " + swearWord)
}
El código anterior funcionará correctamente. Pero el código a continuación no.
swear("Damn!");
var swear = function(swearWord) {
console.log(swearWord);
}
duplicados de http://stackoverflow.com/questions/336859/javascript-var-functionname-function-vs-function- nombre de función –