FirefoxのJavaScript実装(JavaScript 1.7)にはジェネレータという機能がある。
function generator() { window.alert("開始"); yield; window.alert("途中"); yield; window.alert("終了") } var g = generator(); g.next(); // 「開始」と表示 g.next(); // 「途中」と表示 g.next(); // 「終了」と表示され、StopIterationがスローされる。
yield文を含む関数を実行するとジェネレータというオブジェクトが生成される。ジェネレータのnextメソッドを呼び出すと関数が実行され、yieldが呼び出されるまで実行され、そこで処理が一時停止する。もう一度nextメソッドを呼ぶと、次のyieldまで実行される。nextを呼び出して関数の最後まで到達するとStopIterationがスローされる。
例えば、カウンターが作れます。
function counter() { var i = 0; while(true) { yield i; i++; } } var g = counter(); window.alert(g.next()); // 0 window.alert(g.next()); // 1 window.alert(g.next()); // 2
ジェネレータを使うにはJavaScriptのバージョンを指定する必要があるようだ
<script type="text/javascript;version=1.7"> ... </sctipt>