2

我知道yield*可以用来作曲generator,像这样

 function* foo() {
      yield* bar();
      yield 1;
 }
 function* bar() {
      yield 2;
 }

但是,如果我有一些正常的功能yield一个值。

  function xx()
  {
      yield 1;
  }

v8 说

  yield 1;
         ^
  SyntaxError: Unexpected number`

这是否意味着yield只保存 a 的环境generator,而不是完整的调用堆栈,并且没有办法停止和恢复像生成器这样的正常功能?

听说在 FireFox(SpiderMonkey) 中,yield可以在不兼容 ES6 的正常功能中使用。

4

1 回答 1

3

是的,yield仅在生成器中可用。生成器在 ES6 中标记为*,这在 ES6 草案之前的早期 SpiderMonkey 实现中不是这种情况。这就是为什么您可以yield在 SpiderMonkey 中的“正常”函数中使用的原因——这根本不是正常的,而是实际上是一个生成器。

在任何一种情况下,IOW 都yield属于生成器。它总是产生一个浅的、一次性的延续(但你可以用 明确地委托yield*)。

于 2013-09-30T13:09:09.660 回答