Generators
Closely linked with iterators and iterables, generators are one of the most talked about features of ES6. Generator functions return a generator object; this term sounds confusing at first. When you write a function, you also instinctively understand its behavior-the function starts execution, line-by-line, and finishes execution when the last line is executed. Once the function is linearly executed this way, the rest of the code that follows the function is executed.
In languages where multithreading is supported, such flow of execution can be interrupted and partially finished tasks can be shared between different threads, processes, and channels. JavaScript is single-threaded, and you don't need to deal with challenges around multithreading at the moment.
However, generator functions can be paused and resumed later. The important idea here is that the generator function chooses to pause itself, it cannot be paused by any external code. During execution, the function uses the...