Sobes.tech
Junior

¿Qué sabes sobre las diferencias entre una expresión de función (function expression) y una declaración de función (function declaration)?

sobes.tech AI

Respuesta de la IA

La expresión de función puede ser tanto con nombre como anónima. La declaración de función siempre tiene un nombre.

La principal diferencia es el mecanismo de elevación (hoisting):

  • Declaración de función: Se eleva completamente, incluyendo el cuerpo. La función está disponible para ser llamada en el código antes de su declaración real.
  • Expresión de función: Solo se eleva la variable a la que se le asigna (si se usa var). La función en sí solo está disponible después de que el intérprete alcanza la línea con su definición. Con let y const no hay elevación incluso para la variable.
// Declaración de función
console.log(declarationFunc()); // Funciona, la función ha sido elevada

function declarationFunc() {
  return "Yo soy una declaración";
}

// Expresión de función
// console.log(expressionFunc()); // Causará TypeError o ReferenceError (depende de var/let/const)

const expressionFunc = function() {
  return "Yo soy una expresión";
};

console.log(expressionFunc()); // Funciona después de la definición

Las declaraciones de funciones son preferibles para uso general, ya que su orden en el código no afecta la capacidad de llamarlas. Las expresiones de funciones se usan a menudo para:

  • Crear funciones anónimas (por ejemplo, como argumentos o expresiones de función inmediatamente invocadas - IIFE).
  • Definición condicional de funciones.
  • Crear cierres.