function* expression

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.

Từ khóa function* có thể được dùng để định nghĩa một generator function bên trong một biểu thức.

Bạn cũng có thể định nghĩa generator function bằng cách sử dụng function* declaration.

Try it

const foo = function* () {
  yield "a";
  yield "b";
  yield "c";
};

let str = "";
for (const val of foo()) {
  str += val;
}

console.log(str);
// Expected output: "abc"

Cú pháp

js
function* (param0) {
  statements
}
function* (param0, param1) {
  statements
}
function* (param0, param1, /* …, */ paramN) {
  statements
}

function* name(param0) {
  statements
}
function* name(param0, param1) {
  statements
}
function* name(param0, param1, /* …, */ paramN) {
  statements
}

Note: Một expression statement không thể bắt đầu bằng từ khóa function để tránh nhầm lẫn với khai báo function*. Từ khóa function chỉ bắt đầu một biểu thức khi nó xuất hiện trong ngữ cảnh không thể chấp nhận câu lệnh.

Tham số

name Optional

Tên của function. Có thể bỏ qua, trong trường hợp đó function là ẩn danh. Tên chỉ có phạm vi cục bộ trong phần thân function.

paramN Optional

Tên của tham số chính thức cho function. Về cú pháp của tham số, xem tài liệu tham khảo Functions.

statements Optional

Các câu lệnh tạo nên phần thân của function.

Mô tả

Biểu thức function* rất tương tự và có cú pháp gần giống với function* declaration. Sự khác biệt chính giữa biểu thức function* và khai báo function*tên function, có thể được bỏ qua trong biểu thức function* để tạo các function ẩn danh. Biểu thức function* có thể được dùng như một IIFE (Immediately Invoked Function Expression) chạy ngay khi nó được định nghĩa, cho phép bạn tạo một iterable iterator object tạm thời. Xem thêm chương về functions để biết thêm thông tin.

Ví dụ

Sử dụng biểu thức function*

Ví dụ sau đây định nghĩa một generator function không tên và gán nó cho x. Function yield bình phương của đối số:

js
const x = function* (y) {
  yield y * y;
};

Đặc tả

Specification
ECMAScript® 2027 Language Specification
# sec-generator-function-definitions

Tương thích trình duyệt

Xem thêm