3

次のJavascriptスクリプトを実行すると

ite=Iterator(["aaa","bbb"])
ite.next()

私は常に次のようなエラーメッセージを受け取りました。

ここに画像の説明を入力

しかし、作成後の最初の next() ですが、イテレータが機能しなくなったのはなぜですか? さらに、Javascript でオブジェクトを作成するときに「new」を省略できるのはなぜですか? MongoDB v2.2.4 クライアントで Javascript を使用しています。

4

1 に答える 1

3

基本的に、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(...)の結果が であるため) を説明します。varundefined

于 2013-05-23T16:52:42.843 に答える