function* 表达式

Baseline 已广泛支持

此特性已非常成熟,可在多种设备和浏览器版本上使用。自 ⁨2016 年 9 月⁩以来,它已在各大浏览器中可用。

function* 关键字可用于在表达式内部定义一个生成器函数。

你也可以使用 function* 声明来定义生成器函数。

试一试

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

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

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

语法

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
}

注意: 表达式语句不能以 function 关键字开头,以避免与 function* 声明产生歧义。function 关键字只有在不能接受语句的上下文中出现时,才表示一个表达式的开始。

参数

name 可选

函数名称。可以省略,这种情况下函数是匿名的。该名称仅在函数体内部局部有效。

paramN 可选

函数形式参数的名称。有关参数的语法,请参阅函数参考

statements 可选

构成函数体的语句。

描述

function* 表达式与 function* 声明非常相似,且语法几乎相同。function* 表达式和 function* 声明之间的主要区别是函数名称,在 function* 表达式中可以省略函数名称以创建匿名函数。function* 表达式可以用作 IIFE(立即调用的函数表达式),它在定义后立即运行,允许你创建临时的 可迭代迭代器对象。有关更多信息,请参阅有关函数的章节。

示例

使用 function* 表达式

以下示例定义了一个未命名的生成器函数,并将其赋值给 x。该函数返回其参数的平方。

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

规范

规范
ECMAScript® 2026 语言规范
# sec-generator-function-definitions

浏览器兼容性

另见