var nombrefunción = función() {} vs función nombrefunción() {}

2022-04-07 19:20:37

Recientemente comencé a mantener el código JavaScript de otra persona. Corrijo errores, agrego funciones y también trato de ordenar el código y hacerlo más consistente.

El desarrollador anterior usó dos formas de declarar funciones y no puedo determinar si hay una razón detrás de esto o no.

Las dos formas son:

var funciónUno = función() {
    // Algo de código
};
función funciónDos() {
    // Algo de código
}

¿Cuáles son las razones para usar estos dos métodos diferentes y cuáles son las ventajas y desventajas de cada uno? ¿Hay algo que se pueda hacer con un método que no se pueda hacer con el otro?

- Richard Garside

Source
Responder


7388
  • es una expresión de función y, por lo tanto, solo se define cuando se alcanza esa línea, mientras que functionTwo es una declaración de función y se define tan pronto como su entorno se ejecuta la función o script (debido a hoisting).

    Por ejemplo, una expresión de función:

    // TypeError: functionOne no es una función
    funciónUno();
    
    var funciónUno = función() {
      consola.log("¡Hola!");
    };

    Y, una declaración de función:

    // Salidas: "¡Hola!"
    funciónDos();
    
    función funciónDos() {
      consola.log("¡Hola!");
    }

    Históricamente, las declaraciones de funciones definidas dentro de bloques se manejaban de manera inconsistente entre navegadores. El modo estricto (introducido en ES5) resolvió esto mediante declaraciones de función de alcance a su bloque adjunto.

    'use strict';
    { // ¡nota este bloque!
      función funciónTres() {
        consola.log("¡Hola!");
      }
    }
    funciónTres(); // Error de referencia