# Iterator invocation in JavaScript

Каждый последовательный вызов итератора должен возвращать объект специальной структуры. Давайте ее рассмотрим. Пусть у нас есть массив:

`let arr = [1, 2, 3];`

Получим итератор массива в переменную:

`let iter = arr[Symbol.iterator]();`

Теперь в этой переменной содержится объект с методом `next`. Этот метод будет возвращать объект с ключом `value`, содержащим значение элемента, и ключом `done`, содержащим информацию о том, закончился ли перебор или нет:

`console.log( iter.next() ); // {value: 1, done: false}`

Последовательный вызов метода `next` будет каждый раз выдавать следующий элемент:

`console.log( iter.next() ); // {value: 1, done: false} console.log( iter.next() ); // {value: 2, done: false} console.log( iter.next() ); // {value: 3, done: false}`

А как только элементы закончатся, мы увидим следующие значения:

`console.log( iter.next() ); // {value: undefined, done: true}`

Получите итератор коллекции `Map`. Последовательно вызывайте его, пока элементы коллекции не закончатся.

Получите итератор коллекции `NodeList`. Последовательно вызывайте его, пока элементы коллекции не закончатся.

Получите итератор коллекции `HTMLCollection`. Последовательно вызывайте его, пока элементы коллекции не закончатся.

←→
↑
en ru