Когда мы пишем цикл 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);
}
Для получения дополнительной информации читайте документы