使用V8 JavaScript,正常函数可以“产生”一个值吗?

时间:2013-09-30 07:14:54

标签: javascript generator v8 yield

我知道yield*可以用来撰写generator,就像这样

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

但是如果我有一些正常的函数yield一个值。

  function xx()
  {
      yield 1;
  }

v8说

  yield 1;
         ^
  SyntaxError: Unexpected number`

这是否意味着yield仅保存generator的环境,而不是完整的调用堆栈,并且无法停止和恢复像生成器这样的正常函数?

我在FireFox(SpiderMonkey)中听到,yield可用于与ES6不兼容的普通功能。

1 个答案:

答案 0 :(得分:3)

是的,yield仅适用于生成器。生成器在ES6中标记为*,而早于在ES6草案之前的SpiderMonkey实现中并非如此。这就是为什么你可以在SpiderMonkey中的“普通”函数中使用yield - 然后它根本就不正常,但实际上是一个生成器。

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