Когда мы пишем цикл for..of, как он внутренне вызывает symbol.iterator

Рассмотрим этот код.

let array = [1,2,3,4,5]

for(let elem of array) {
    console.log(elem)
}

Так как здесь я не называю ничего подобного array[Symbol.iterator]().since мы можем только выполнить функцию, поставив скобки после выражения, которое оценивает его значение. здесь мы просто пишем for(let elem of array) как он выполняет функцию с именем array[Symbol.iterator]?

2 ответа

Вы можете проверить это достаточно просто, заменив [Symbol.iterator] и посмотрим что получится

let array = [1,2,3,4,5]

array[Symbol.iterator] =  function* () {
    yield *['Larry', 'Mo', 'Curley'];
};

for(let elem of array) {
    console.log(elem)
}

Хороший вопрос, на самом деле for of обработчик цикла отображается на for обработчик цикла со встроенным итератором и параметрами, для лучшего понимания и использования [Symbol.iterator] Вы можете легко проверить это как следующий код:

const iterable1 = new Object();

iterable1[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
  yield 4;
  yield 5;
};

const arr = [...iterable1];

for(let elem of arr) {
    console.log(elem);
}

Для получения дополнительной информации читайте документы

Другие вопросы по тегам