ES6 生成器17 Mar 2025 | 4 分钟阅读 Generator (或 Generator 函数) 是 ES6 中引入的新概念。它为你提供了一种使用迭代器和函数的新方法。 ES6 generator 是一种不同类型的函数,它可以在中间暂停一次或多次,并可以在以后恢复。当调用标准函数时,控制权在于被调用函数,直到它返回,但 ES6 中的 generator 允许调用者函数控制被调用函数的执行。 ![]() generator 在某些方面与常规函数相同,除了:
语法generator 函数的语法几乎与常规函数相同。唯一的真正区别是 generator 函数由一个 星号 (*) 后缀 function 关键字 表示。 在下面的语法中,我们向你展示了一些定义 generator 函数的有效方法。 示例输出 100 undefined 200 yield 语句yield 语句暂停函数执行并将值发送回调用者。它保留足够的状态以使函数能够从中断的地方恢复。当它恢复时,该函数会立即在上次 yield 运行后继续执行。它可以产生一系列值。 next() 方法在上面的例子中,我们使用了 next() 方法,它是 generator 的主要方法。当你使用参数调用 next() 方法时,它将恢复 generator 函数的执行,并将执行暂停的 yield 表达式替换为来自 next() 方法的参数。 next() 方法的结果始终是一个具有两个属性的对象:
例如,在这里,我们正在创建一个 generator 函数并获取其 yielded 值。 示例输出 { value: 100, done: false } Generator 对象generator 函数返回 generator 对象。 generator 对象是 generator 函数的一个实例,它符合 iterable 和 iterator 接口。 可以通过调用 next() 方法 或通过在循环中使用 generator 对象来使用 generator 对象。 generator 对象是一个迭代器;这就是为什么你可以在 for…of 循环或其他接受 iterable 的函数中使用它。 在上面的 next() 方法 示例中,变量 gen 是 generator 对象。 Generator 中的 Return 语句Return 用于将指定的值发送回其调用者。它用于结束函数调用执行并将结果返回给调用者。在函数中,return 语句之后定义的语句不会执行。这就是 return 语句应该是函数的最后一条语句的原因。 让我们尝试通过一个例子来理解 generator 中的 return 语句。 示例输出 { value: 'First yield statement', done: false } { value: 'Second yield statement', done: false } { value: 'Return statement', done: true } { value: undefined, done: true } 在上面的例子中,我们定义了一个 generator 函数 myGen(),其中我们定义了四个语句,包括三个 yield 语句 和一个 return 语句。每当我们调用 next() 方法时, 函数都会恢复,直到它命中下一个 yield 语句。 你可以注意到第一个 next() 方法 如何返回 'First yield statement .' 当我们第二次调用 next() 方法时, 它会恢复执行并返回 'Second yield statement'。再次调用 next() 方法 后,该函数没有找到更多的 yield 语句并返回 'Return statement.'。但是,当我们第四次调用 next() 方法时, 它将不考虑 yield 语句并返回 undefined,因为它写在 return 语句之后。 你可以在上面例子的输出中看到,next() 方法 没有考虑 return 语句 之后的任何语句。 带有 for…of 循环的 Generator 函数使用带有 generator 函数的 for…of 循环减少了代码行数。 你可以在以下示例中看到相同的说明。 示例输出 A E I O U 注意:Generator 函数不能用箭头函数表示。下一个主题ES6 IIFE |
我们请求您订阅我们的新闻通讯以获取最新更新。