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. Comleteconstnã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.