someserj
@someserj

Почему консоль выводит числа (Symbol.iterator)?

SGZr1N4TTDeSWbH5qT6wxA.png

выводит

9zm_r-CeRbmJfgFE3ZYEcA.png

не пойму вообще как работает этот код. где вызов функции next() происходит? почему в n содержится число?
(в теории это пример про создание итератора с помощью Symbol, который формирует числа Фибоначчи)
  • Вопрос задан
  • 193 просмотра
Пригласить эксперта
Ответы на вопрос 1
Symbol.iterator устанавливает поведение при итерации объекта. В случае с for..of метод next вызывается неявно. Но его присутствие и вид возвращаемого объекта с полями value и done обязывает протокол итератора. В value содержится текущее значение, которое попадает в переменную n, а в done указан флаг окончания итерации.

Тот же самый протокол используется, к примеру, в генераторах:
function fibonacci(max) {
  return {
    [Symbol.iterator]: function* iterator() {
      let prev = 0
      let cur = 1
      while (true) {
        [prev, cur] = [cur, prev + cur]

        if (cur > max) {
          return cur
        }

        yield cur
      }
    }
  }
}

[...fibonacci(1500)] // Массив с числами Фибоначчи с ограничением «1500»

// Но при этом...
const iterable = fibonacci(1500)[Symbol.iterator]()
iterable.next() // {value: 1, done: false}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы