expresión de función:
//someFunction(); //wouldn't work when uncommented
var someFunction = function(){ alert('yay'); };
La expresión func en este caso es anónima pero se asigna a una var como referencia. Esto es diferente de una declaración de función etiquetada de las siguientes maneras:
- no se puede izar (se llama antes de que se defina)
new someFunction().constructor.name === 'someFunction';//false
las instancias no obtienen el nombre var para constructor.name porque se asigna una referencia a la función a la var pero la var, no la función, está vinculada al nombre var
En una declaración de función etiquetada:
//someFunction(); //works when uncommented
function someFunction(){ alert('yay'); }
- trabajos de elevación
new someFunction().constructor.name === 'someFunction'; //true
el nombre está vinculado directamente a la función.
En términos generales, no hay una buena razón para hacer una expresión en var a menos que desee que las llamadas fallen si las cosas se mueven o si está definiendo / asignando un método en una línea. De hecho, encuentro que el izado es útil para organizar objetos con funciones internas y definiciones de métodos en la parte inferior para poder llegar al comportamiento real del objeto y hacer definiciones de métodos públicos de una línea (simplemente asignando funciones this.
con el mismo nombre) todo en uno lugar para facilitar la referencia. Siempre debe intentar usar declaraciones etiquetadas para constructores, IMO, para que pueda identificar el 'tipo' de un objeto a través de su constructor.