@IvanIvanIvanIvanIvan

Итерируемые объекты, почему в цикле первое значение 1?

let range = {
  from: 1,
  to: 5
};

// 1. вызов for..of сначала вызывает эту функцию
range[Symbol.iterator] = function() {

  // ...она возвращает объект итератора:
  // 2. Далее, for..of работает только с этим итератором, запрашивая у него новые значения
  return {
    current: this.from,
    last: this.to,

    // 3. next() вызывается на каждой итерации цикла for..of
    next() {
      // 4. он должен вернуть значение в виде объекта {done:.., value :...}
      if (this.current <= this.last) {
        return { done: false, value: this.current++ };
      } else {
        return { done: true };
      }
    }
  };
};

// теперь работает!
for (let num of range) {
  console.log(num); // 1, затем 2, 3, 4, 5
}


https://playcode.io/540432

Подскажите пожалуйста, почему первое значение которое выводит цикл это 1 а не 2?
При вызове первой итерации должно же увеличить 1 вот в этом месте
return { done: false, value: this.current++ };
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
В JS есть по 2 оператора инкримента и декримента
Так
let x = 10;
console.log(x++); // 10
console.log(x--); // 11
значение сначала будет передано в console.log, а потом посчитано новое
А так
let x = 10;
console.log(++x); // 11
console.log(--x); // 10
сначала посчитает, а потом передаст в console.log
С присваиванием и назначением ключу объекта происходит тоже самое
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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