В чем разница между var f = function(){}; и function f(){};?
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 ')'
// line 1
typeof hoisted; // function
'hoisted' in window; // true

// Some code...

// line 500
function hoisted() {}
А этот код// line 1
typeof hoisted; // undefined
'hoisted' in window; // true

// Some code...

// line 500
var hoisted = function() {};
То же самое, что и// line 1
var hoisted;
typeof hoisted; // undefined
'hoisted' in window; // true

// Some code...

// line 500
hoisted = function() {};