生成器函数表达式

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

您还可以使用 function* 声明 定义生成器函数。

试一试

语法

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 语言规范
# sec-generator-function-definitions

浏览器兼容性

BCD 表仅在启用 JavaScript 的浏览器中加载。

另请参阅