次のJavascriptスクリプトを実行すると
ite=Iterator(["aaa","bbb"])
ite.next()
私は常に次のようなエラーメッセージを受け取りました。
しかし、作成後の最初の next() ですが、イテレータが機能しなくなったのはなぜですか? さらに、Javascript でオブジェクトを作成するときに「new」を省略できるのはなぜですか? MongoDB v2.2.4 クライアントで Javascript を使用しています。
次のJavascriptスクリプトを実行すると
ite=Iterator(["aaa","bbb"])
ite.next()
私は常に次のようなエラーメッセージを受け取りました。
しかし、作成後の最初の next() ですが、イテレータが機能しなくなったのはなぜですか? さらに、Javascript でオブジェクトを作成するときに「new」を省略できるのはなぜですか? MongoDB v2.2.4 クライアントで Javascript を使用しています。
基本的に、Iterator
あなたが学んだ .
(驚き!) MDN は Firefox で使用される JavaScript のバージョンをカバーすることが最も多いため、MDN に関するドキュメントがあります。
一方、現在のバージョンの MongoDB はV8 JavaScript エンジン(Chrome と同じもの) を使用しているため、Iterator
.
残念ながら、これは ReferenceError が発生しなかった理由を説明していません。使用している MongoDB のバージョンには、使用可能なエンジンが含まれている可能性がIterator
あります。
この動作を Firebug でテストすると、さらに奇妙な結果が得られます。
>>> ite = Iterator(['aaa','bbb']);
>>> ite.next();
// Nothing
>>>
>>> var ite = Iterator(['aaa','bbb']);
>>> ite.next();
[0, "aaa"]
>>> ite.next();
[1, "bbb"]
>>> ite.next():
// Nothing
Firebug が を抑制している可能性があると思われますがStopIteration
、Iterator をグローバルにすると反復されない理由がわかりません。誰かがこれについて何か洞察を持っているなら、私はそれを聞くことに興味があります.
それまでの間、Iterator をローカル変数として作成してみてください。反復を機能させることができた唯一の方法でした。
// Notice the 'var'
var ite = Iterator(["aaa","bbb"]);
はい、コメントで @MikeSamuel が指摘したように、REPL が Iterator を表示しようとすると、実際にはそれを使い果たしてしまうようです。これは、なぜite = Iterator(...)
機能しないのか (式の結果として反復子を返し、それが REPL によって使い果たされるため) と機能する理由(宣言var ite = Iterator(...)
の結果が であるため) を説明します。var
undefined