Qual é a diferença entre uma expressão de função vs declaração em JavaScript? [duplicado]

Esta questão já tem uma resposta aqui:

var functionName = function () {} vs função functionName () {} 37 respostas

Qual é a diferença entre as seguintes linhas de código?

<code>//Function declaration
function foo() { return 5; }

//Anonymous function expression
var foo = function() { return 5; }

//Named function expression
var foo = function foo() { return 5; }
</code>
O que é uma expressão de função nomeada / anônima?O que é uma função declarada?Como os navegadores lidam com essas construções de maneira diferente?

O que as respostas a uma pergunta semelhante (var functionName = function () {} vs função functionName () {}) não fica exatamente certo?

questionAnswers(5)

yourAnswerToTheQuestion