Allen Wirfs-Brock (2015-04-27T23:59:14.000Z)
d at domenic.me (2015-05-11T17:01:29.017Z)
On Apr 27, 2015, at 3:29 PM, Tab Atkins Jr. wrote: > 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.