LoginSignup
4
4

More than 5 years have passed since last update.

Firefoxで使える2つのyieldの挙動の違いについて

Posted at

最近ES6のことをちょっと勉強していて気づいたことをメモ

ES6からyieldが導入されるらしく非同期の処理などが楽になるのではないかと期待しているのですが、
最近firefoxでyieldを試していると、挙動が違う2つのyieldがあることに気づきました。

*Firefox 27で試しています。

ES6から導入されたyieldは返り値としてdoneresultの2つの値ををもつオブジェクトを返します。

funciton * gen(){
    yield 1;
    yield 2;
}

g = gen();

g.next();  // {done: false, result: 1}

g,next(); // {done: false, result: 2}

g.next(); // {done: true, result: undefined} つぎのyieldがないとdone: trueになる

しかし、Firefoxは実はJavaScript1.7(2006年!)からyieldが使えたらしく

funciton gen(){
    yield 1;
    yield 2;
}

g = gen();

g.next();  // 1

g,next(); // 1

g.next(); // Exception: [object StopIteration]

こちらは function *ではなくfunctionで宣言すれば使える。

違いとしては
- 次に実行するyieldがなくなると例外が発生する
- 返り値は値が返ってくるだけ

個人的にはES6のほうが好みなので改善?してよかったなぁと

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4