Все сравнения есть
тут.
Основное отличие между ними: функции, объявленные как Function Declaration, создаются интерпретатором до выполнения кода, поэтому их можно вызвать до объявления, например:
// Function Declaration
sum(1,2) //3
function sum(a, b) {
return a + b;
}
// Function Expression
summer(1,2) //Ошибка, summer не определена
var summer = function(a, b) {
return a + b;
}
P.s А еще есть выделяющийся из толпы конструктор
Function. Он позволяет создавать функции из строки, но его детища, заразы, не запоминают окружение, в котором созданы.
var
abs = "Я переменная",
func = (function(abs){
return new Function("", "return abs;");
})("Я аргумент")
;
//Вызовем созданную функцию
alert(func()); //"Я переменная"