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++ };