2

このようyield*に を構成するために使用できることを知っていますgenerator

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

しかし、通常の機能がyieldある場合は値です。

  function xx()
  {
      yield 1;
  }

v8 言う

  yield 1;
         ^
  SyntaxError: Unexpected number`

完全なコールスタックではなく、yielda の環境のみを保存し、ジェネレーターのような通常の関数を停止して再開する方法がないことを意味しますか?generator

yieldFireFox(SpiderMonkey)では、 ES6に対応していない通常の機能で使えると聞きました。

4

1 に答える 1

3

はい、yieldジェネレーターでのみ使用できます。ジェネレーターは*ES6 では によってマークされますが、これは ES6 ドラフトより前の以前の SpiderMonkey 実装には当てはまりませんでした。これが、SpiderMonkey の「通常の」関数で使用できる理由です。yieldこれはまったく通常ではなく、実際にはジェネレーターです。

いずれの場合も、IOWyieldはジェネレーターに属します。そして、それは常に浅いワンショットの継続を生成します (ただし、 で明示的に委譲できますyield*)。

于 2013-09-30T13:09:09.660 に答える