Вот как вы можете создать пользовательскую функцию для возврата итератора по умолчанию для объекта (перезаписав его по умолчанию) и посмотреть, как он вызывается:

объект реализовал итеративный интерфейс, он должен реализовать[Symbol.iterator] ключ, который указывает на функцию, которая возвращаетiterator, Мне интересно, еслиfor..of Цикл внутренне вызывает этот метод на объекте, чтобы получить этоiterator?

Мне интересно, что, например,Map определяет интерфейс с несколькими итераторами (записями, значениями, ключами), и кажется, что если не указано явно,for..of цикл использует итератор, возвращаемыйmap.entries() вызов.

Я пытаюсь найтив спецификации но это только указывает, чтоiterator передается в качестве параметра абстрактной операцииForOf:

Абстрактная операция ForIn / OfBodyEvaluation вызывается с аргументами lhs, stmt,итератор, iterationKind, lhsKind и labelSet.

Итак, в основном два вопроса:

Как итератор получается из объекта?Где это указано в спецификации?

Ответы на вопрос(2)

Ваш ответ на вопрос