# 05. Generator .return()

Вызов `generator.return(x)` завершает выполнение генератора со значением `x`;

* `return(x)` завершает функцию генератор, выполняя `return x` на месте текущего приостановленного `yield`.
* `return()` используется для остановки и закрытия генератора.
* Новые вызовы `generator.next()` больше не имеют смысла. Впрочем, если они и будут, то не вызовут ошибки, но будут возвращать один и тот же объект: `{done: true}`.
* «Открутить назад» завершившийся генератор нельзя.

You can prevent `return()` from terminating the generator if you yield inside the finally clause (using a return statement in that clause is also possible):

```javascript
function* generatorFunction() {
  try {
    console.log("Started");
    yield;
  } finally {
    yield "Not done, yet!";
  }
}
```

This time, `return()` does not exit the generator function. Accordingly, the property `done` of the object it returns is `false`. You can invoke `next()` one more time. Similarly to non-generator functions, the return value of the generator function is the value that was queued prior to entering the finally clause.

```javascript
const generator = generatorFunction();
generator.next(); // { value: undefined, done: false }
generator.return("Result"); // { value: 'Not done, yet!', done: false }
generator.next(); // { value: 'Result', done: true }
```

Returning a value from a newborn generator (that hasn’t started yet) is allowed:

```javascript
function* genFunc() {}
genFunc().return("yes");
// { value: 'yes', done: true }
```
