Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

"yield*"記法は変数をバラして渡す事ができる

"yield*"記法はforeachでぶん回せるような変数をバラして次の関数に渡す事ができます。

実際のところ

具体例として、フィボナッチ数列をジェネレータ関数で実装するケースを考えてみます。
記述する際の利用法は以下の(1)(2)の通り。

'use strict';

function* fibonacci() { 
  let o = [0, 1, 1]; // (1)
  yield* o;          // (2)
  while (true) {
    o[0] = o[1];
    o[1] = o[2];
    o[2] = o[0] + o[1];
    yield o[2];
  }
}

for (var n of fibonacci()) {
  console.log(n);
  if (n >= 1000) break;
}
/*
0
1
1
2
3
5
...
987
1597
*/

ここで、この記法を知らないと(2)の部分が以下の様な感じの実装になってしまいますね。

   for (let val of o) { yield val; } // (2)'