Giải thích sự khác biệt về cách sử dụng foo giữa "function foo () {}" và "var foo = function () {}" ?

{{FormatNumbertoThousand(model.total_like)}} lượt thích
612 lượt xem
Javascript middle

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');
};
{{login.error}}