var f = function() {};
—
function expressionfunction f() {};
—
function declaration
Основная разница в том, что второе поднимает определение функции до начала области видимости, в которой она объявлена. То есть можно использовать функцию до ее объявления.
hoisted(); // выведет 'foo'
function hoisted() {
console.log('foo');
}
notHoisted(); // TypeError: notHoisted is not a function
var notHoisted = function() {
console.log('bar');
};
upd:
Другое отличие состоит в возможности моментального вызова функции, так называемое
iifevar expression = function() { console.log('foo'); }();
// выведет 'foo'
function declaration() { console.log('bar'); }();
// SyntaxError: expected expression, got ')'