On Apr 27, 2015, at 3:29 PM, Tab Atkins Jr. wrote:

> On Mon, Apr 27, 2015 at 3:11 PM, John Lenz <[email protected]> wrote:
>> By which I mean the object that returns the current value and "done" state?
> 
> IIRC, it's not supposed to.  The built-in iterators will return fresh
> objects each time, so there's no mutation hazard.  Userland iterators
> can of course violate this, but at their peril.

Well, that's not exactly what the ES2015 spec. says.  The specification of the 
Iterator interface 
(http://people.mozilla.org/~jorendorff/es6-draft.html#sec-iterator-interface ) 
does not require that the `next` method return a fresh object each time it it 
called.  So a userland iterator would not be violating anything by reusing a 
result object.  

However,  the specifications for all ES2015  built-in iterators require that 
they return fresh objects.

None of the built-in consumers of the Iterator interface (for-of, Array.from, 
etc.) retain references to IteratorResult objects after testing for `done` and 
accessing the `value`, so semantically they don't care whether the ResultObject 
is reused. However, such reuse might preclude some otherwise plausible engine 
level optimizations.  

Allen


_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to