Allen Wirfs-Brock (2015-02-02T17:19:43.000Z)
d at domenic.me (2015-02-13T23:48:39.758Z)
"close" exists to deal with abnormal loop completion (or consumption completion, in general). A for-of loop only class "close" on its iterator, if something happens (exception, return, break) to terminate the loop before its iterator is exhausted. That is exactly what is happening if yield* throws because of a "protocol violation" for the situation we are talking about. yield*, just like for-of, doesn't call "close" on a normal (the inner iterator was exhausted) completion.