En javascript existen básicamente 2 formas de crear una función, este artículo es para intentar desenmarañar cual de ambas formas es la mejor o al menos lo que yo considero mejor (este suele ser un tema muy polémico)..
La primera forma es simplemente crear una función como en cualquier otro lenguaje (Function Declaration) y se utiliza la instrucción “function”, la función está disponible en tiempo de análisis y se puede llamar casi desde cualquier lugar.. por ej:
function fx_1() { // código ... } |
La segunda que es la menos utilizada por los “non – javascripters coders” (ódiame, pero se reconocen por esto).. y es crear una variable a la cual se le asigna una función (Function Expression).. por ej:
// asignación de una función anónima var fx_2 = function() { // código ... }; // asignación de una función nombrada // es exactamente lo mismo var fx_2 = function foo() { // código ... }; |
Mmm.. pues en realidad parece no haber diferencias.. y la única diferencia que encuentro es que fx_1 se puede invocar sin importar donde se encuentre la declaración..
fx_1(); // funciona function fx_1(){ // código ... } fx_1(); // también funciona |
Pero si intentan utilizar la segunda manera quizás no puedan invocar la función antes de haberse seteado el valor de la variable..
fx_2(); // undefined, porque fx_2 no existe aún var fx_2 = function(){ // código ... } fx_2(); // funciona |
Me gusta más la segunda forma, aparte de que permite la sobre-escritura del método sin modificar el valor original de la función..
var fx_2 = function(){ console.log('foo'); } fx_2(); // el resultado será foo fx_2 = function(){ console.log('abc'); } fx_2(); // el resultado será abc |
Y si intentan hacer esto con una declaración de función de la primera forma.. no se podría porque se sobre-escribe la declaración completa del método..
function fx_1(){ console.log('foo'); } fx_1(); // el resultado será abc function fx_1(){ console.log('abc'); } fx_1(); // el resultado será abc |
Se podría decir que la segunda forma es una declaración de función en tiempo de ejecución y personalmente me gusta más que la primera porque creo que se tiene cierto control con la declaración de funciones y se evita ese desorden para lo que se presta tanto javascript.
Happy Coding!