Sobes.tech
Junior

O que sabes sobre as diferenças entre uma expressão de função (function expression) e uma declaração de função (function declaration)?

sobes.tech IA

Resposta da IA

A expressão de função pode ser nomeada ou anónima. A declaração de função sempre tem um nome.

A principal diferença é o mecanismo de elevação (hoisting):

  • Declaração de função: É elevada completamente, incluindo o corpo. A função está disponível para chamada no código antes da sua declaração real.
  • Expressão de função: Apenas a variável a ela atribuída é elevada (se usar var). A própria função só está disponível após o interpretador atingir a linha com sua definição. Com let e const não há elevação mesmo para a variável.
// Declaração de função
console.log(declarationFunc()); // Funciona, a função foi elevada

function declarationFunc() {
  return "Eu sou uma declaração";
}

// Expressão de função
// console.log(expressionFunc()); // Causará TypeError ou ReferenceError (depende de var/let/const)

const expressionFunc = function() {
  return "Eu sou uma expressão";
};

console.log(expressionFunc()); // Funciona após a definição

Declarações de funções são preferidas para uso comum, pois sua ordem no código não afeta a capacidade de chamá-las. Expressões de funções são frequentemente usadas para:

  • Criar funções anónimas (por exemplo, como argumentos ou expressões de função imediatamente invocadas - IIFE).
  • Definir funções condicionalmente.
  • Criar closures.