SyntaxError: function statement requires a name

Ngoại lệ JavaScript "function statement requires a name" xảy ra khi có một câu lệnh hàm trong code yêu cầu một tên.

Thông báo

SyntaxError: Function statements require a function name (V8-based)
SyntaxError: function statement requires a name (Firefox)
SyntaxError: Function statements must have a name. (Safari)

Loại lỗi

SyntaxError

Điều gì đã xảy ra?

Có một câu lệnh hàm trong code yêu cầu một tên. Bạn cần kiểm tra cách các hàm được định nghĩa và xem bạn có cần cung cấp tên cho nó không, hoặc liệu hàm đó có cần là một biểu thức hàm, một IIFE, hay liệu code hàm có được đặt đúng ngữ cảnh này không.

Ví dụ

Câu lệnh so với biểu thức

Một câu lệnh hàm (hoặc khai báo hàm) yêu cầu một tên. Cách này sẽ không hoạt động:

js
function () {
  return "Hello world";
}
// SyntaxError: function statement requires a name

Bạn có thể sử dụng biểu thức hàm (phép gán) thay thế:

js
const greet = function () {
  return "Hello world";
};

Nếu hàm của bạn dự định là một IIFE (Immediately Invoked Function Expression, là một hàm chạy ngay khi được định nghĩa) thì bạn cần thêm một vài dấu ngoặc:

js
(function () {
  // …
})();

Hàm được đặt nhãn

Nhãn là một tính năng hoàn toàn khác so với tên hàm. Bạn không thể sử dụng nhãn làm tên hàm.

js
function Greeter() {
  german: function () {
    return "Moin";
  }
}
// SyntaxError: function statement requires a name

Ngoài ra, các khai báo hàm có nhãn là một tính năng đã lỗi thời. Hãy sử dụng khai báo hàm thông thường thay thế.

js
function Greeter() {
  function german() {
    return "Moin";
  }
}

Phương thức đối tượng

Nếu bạn muốn tạo một phương thức của đối tượng, bạn cần tạo một đối tượng. Cú pháp sau đây không có tên sau từ khóa function là hợp lệ.

js
const greeter = {
  german: function () {
    return "Moin";
  },
};

Bạn cũng có thể sử dụng cú pháp phương thức.

js
const greeter = {
  german() {
    return "Moin";
  },
};

Cú pháp callback

Ngoài ra, hãy kiểm tra cú pháp của bạn khi sử dụng callback. Dấu ngoặc nhọn và dấu phẩy có thể dễ gây nhầm lẫn.

js
promise.then(
  function () {
    console.log("success");
  });
  function () {
    console.log("error");
}
// SyntaxError: function statement requires a name

Đúng phải là:

js
promise.then(
  function () {
    console.log("success");
  },
  function () {
    console.log("error");
  },
);

Xem thêm