Iterator
并不存在于所有JavaScript引擎中——或者更确切地说,在所有ECMAScript引擎中(JavaScript在技术上是ECMAScript的Mozilla变体)。Iterator
。
Iterator
的引擎。>>> ite = Iterator(['aaa','bbb']);
>>> ite.next();
// Nothing
>>>
>>> var ite = Iterator(['aaa','bbb']);
>>> ite.next();
[0, "aaa"]
>>> ite.next();
[1, "bbb"]
>>> ite.next():
// Nothing
StopIteration
,但我不知道为什么将迭代器设为全局变量会导致无法进行迭代。如果有人对此有任何见解,我很想听听。// Notice the 'var'
var ite = Iterator(["aaa","bbb"]);
是的,正如评论中所指出的那样,当REPL试图显示Iterator时,实际上会将其耗尽。这就解释了为什么 ite = Iterator(...)
不起作用(因为它将迭代器作为表达式的结果返回,然后被REPL耗尽),以及为什么 var ite = Iterator(...)
起作用(因为var
声明的结果是undefined
)。
Iterator(...)
不会抛出ReferenceError呢?它不仅成功了,而且对next()
的调用随后抛出了StopIteration
,这是迭代API的一部分。 - cHaoite = Iterator(...)
时,REPL 尝试显示其值,因此耗尽了它。当你使用 var ite = ...
时,REPL 得到的结果是 void,因此不会对迭代器执行任何操作。 - Mike Samuel
Iterator
。 - voithos