Cái trước là một function declaration (khai báo hàm) trong khi cái sau là một function expression (biểu thức hàm).
Sự khác biệt chính là các function declarations có phần thân của nó được hoisting nhưng phần thân của function expression thì không (chúng có cùng hành vi hoisting như các biến).
Nếu bạn cố gắng gọi một function expression trước khi nó được định nghĩa, bạn sẽ nhận được một lỗi Uncaught TypeError: XXX is not a function.
Function Declaration
foo(); // 'FOOOOO'
function foo() {
console.log('FOOOOO');
}
Function Expression
foo(); // Uncaught TypeError: foo is not a function
var foo = function() {
console.log('FOOOOO');
};