Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Function Expression vs Function Declaration trong JavaScript

Function Declaration (Khai báo hàm)

Được hoisting (nâng lên đầu scope) – có thể gọi trước khi khai báo.

function sayHello(name, age) {
  document.write(name + " is " + age + " years old.");
}

sayHello("An", 25); // Hợp lệ

Function Expression (Biểu thức hàm)

Không được hoisting – phải định nghĩa trước khi dùng. Có thể là anonymous hoặc named.

// Anonymous
var greet = function(name) {
  return "Hello " + name;
};

// Named (giúp debug stack trace)
var factorial = function fact(n) {
  return n <= 1 ? 1 : n * fact(n - 1);
};

So sánh nhanh

Đặc điểmDeclarationExpression
HoistingCóKhông
Dùng trước khai báoĐượcLỗi ReferenceError
Gán cho biếnKhông trực tiếpĐược
Callback/IIFEKhó khănDễ dàng

Khuyến nghị hiện đại

  • Ưu tiên Function Expression (arrow function) cho callback, method.
  • Dùng Declaration cho hàm tiện ích toàn cục cần hoisting.
  • Tránh Function Declaration trong block (if, for) – hành vi khác nhau giữa strict/sloppy mode.