何が"関数"*"JavaScript?
-
09-12-2019 - |
質問
に この ページから新しいJavaScript関数の型:
// NOTE: "function*" is not supported yet in Firefox.
// Remove the asterisk in order for this code to work in Firefox 13
function* fibonacci() { // !!! this is the interesting line !!!
let [prev, curr] = [0, 1];
for (;;) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
私は既に分かってい 何 yield
, let
や [?,?]=[?,?]
い, がんの function*
このままです。何ですか?
P.S.かわいいGoogleで 不可 検索のための表現星印(彼らはプレースホルダとして使用).
解決
この 発電機 機能です。
ジェネレータは、できる機能終了した後に再入力されます。そのコンテキスト(変数のバインディング)保存されます全再出入口。
呼び出しで発生させる装置機能が実行されないその時には、直ちに;序で繰り返し処理する反復子オブジェクトのための関数が返されます。場合、反復子の
next()
メソッドが呼び出されるときの発電機能が実行されるまでのyield
表現するかを指定する値から返される反復子は、yield*
, した参加者は、他の発電機能です。
歴史的注
で提案する構文のための EcmaScript.next
.
DaveハーマンのMozillaについて講演して EcmaScript.次へ.時 30:15 彼は話しています。
以前、彼を説明していMozillaでは実験的に実施を提案した言語の変更を導委員として参加しています。Daveと聖ブレンダンEich、MozillaのCTO(う)にあり、JavaScriptのデザイナー。
のもので詳細は、EcmaScript作業グループのwiki: http://wiki.ecmascript.org/doku.php?id=harmony:generators
この作業グループ(TC-39)は一般的な合意とEcmaScript.次は何らかの機序で繰り返し処理する反復子の提案ではあるが、最終的なものとする。
なんかに頼ることを示すまで変化させることなく、次のバージョンの言語でもっていることを確認してください替えると、なんまで幅広く他のブラウザ。
概要
初級coroutinesで表されるオブジェクトとして封止実行コンテキスト(すなわち、機能賦活).先行技術:Python、アイコンLuaスキームSmalltalk.
例
"無限のシーケンスのフィボナッチ数列(かかわらず動作周辺の253):
function* fibonacci() { let [prev, curr] = [0, 1]; for (;;) { [prev, curr] = [curr, prev + curr]; yield curr; } }
発生器の反復にループ:
for (n of fibonacci()) { // truncate the sequence at 1000 if (n > 1000) break; print(n); }
ジェネレータは、反復子:
let seq = fibonacci(); print(seq.next()); // 1 print(seq.next()); // 2 print(seq.next()); // 3 print(seq.next()); // 5 print(seq.next()); // 8
他のヒント
それは Generator関数 によると、そのページの中であなたが「これは面白い線」に置き換えたコメント...
基本的には、シーケンスを渡すことができるようにシーケンスをプログラム的に指定する方法で、順序を渡すことができず(おそらくサイズで無限のサイズ)を計算する必要があります。