In this chapter, we took a detailed look at ES6 Generators. Generators are one of the most anticipated features of ES6. The ability to pause and resume execution of a function opens up a lot of possibilities around co-operative programming. The primary strength of generators is that they provide a single-threaded, synchronous-looking code style, while hiding the asynchronous nature away. This makes it easier for us to express in a very natural way what the flow of our program's steps/statements is without simultaneously having to navigate asynchronous syntax and gotchas. We achieve separation of concern using generators due to this.
Generators work hand-in-hand with the iterators and iterables contract. These are welcome addition to ES6 and significantly boosts the data structures the language offers. Iterators provide a simple way to return a (potentially unbounded) sequence of values. The @@iterator
symbol is used to define default iterators for objects, making them an iterable.
The most important use case for iterators becomes evident when we want to use it in a construct that consumes iterables, such as the for...of
loop. In this chapter we also looked at a new loop construct for...of
introduced in ES6. for...of
works with a lot of native objects because they have default @@iterator
methods defined. We looked at new additions to the ES6 collections like-Maps, Sets, WeakMaps, and Weak Sets. These collections have additional iterator methods-.entries()
, .values()
and .keys()
.
The next chapter will take a detailed look at JavaScript Prototypes.