
"Iterators are one of JavaScript's more linguistically confusing topics, sailing easily over what is already a pretty high bar. There are iterables - array, Set, Map, and string - all of which follow the iterable protocol. To follow said protocol, an object must implement the iterable interface. In practice, that means that the object needs to include a [Symbol.iterator]() method somewhere in its prototype chain. Iterable protocol is one of two iteration protocols. The other iteration protocol is the iterator protocol."
"See what I mean about this being linguistically fraught? Iterables implement the iterable iteration interface, and iterators implement the iterator iteration interface! If you can say that five times fast, then you've pretty much got the gist of it; easy-peasy, right? No, listen, by the time you reach the end of this lesson, I promise it won't be half as confusing as it might sound, especially with the context you'll have from the lessons that precede it."
JavaScript distinguishes two iteration protocols: the iterable protocol and the iterator protocol. Iterables such as Array, Set, Map, and String follow the iterable protocol by exposing a [Symbol.iterator]() method somewhere in their prototype chain. That method produces iterator objects. Iterator objects follow the iterator protocol and yield elements sequentially, one at a time. Iterable objects thus provide a conventional way to create iterators so their elements can be traversed with for...of. The terminology can be linguistically confusing because 'iterables implement the iterable interface' while 'iterators implement the iterator interface', but the practical difference is producing versus consuming sequence values.
 Read at Smashing Magazine
Unable to calculate read time
 Collection 
[
|
 ... 
]