Expressão de função JavaScript vs declaração de função

expressões de função e instruções de função são muito semelhantes em JavaScript, a diferença é como o navegador as carrega no contexto de execução.

// function statement
function foo() {
}

// function expression
var foo = function() {
};

<b> declarações de função </b>

Uma instrução de função é carregada antes que qualquer código seja executado. Esse comportamento das instruções de função é chamado de içamento, o que permite que uma função seja usada antes de ser definida.

alert(foo()); // Alerts "hello from foo".
function foo() { return "hello from foo"; }

<b> expressões de função </b>

Uma expressão de função associa um valor a uma variável, assim como qualquer outra instrução de atribuição. as expressões de função são carregadas apenas quando o interpretador atinge a definição da função.

alert(foo()); // ERROR!
var foo = function() { return "hello from foo"; }

mais informações sobre conceitos de JavaScript