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"; }