SOURCE

// ================== 迭代器 ======================
function makeRangeIterator() {
    let iterator = {
        value: "1",
        done: false,
        next: function () { return iterator2 }
    }
    const iterator2 = {
        value: "2",
        done: false,
        next: function () { return iterator3 }
    }
    const iterator3 = {
        value: "3",
        done: false,
        next: function () { return iteratorDone }
    }
    const iteratorDone = {
        done: true,
        next: function () { return iteratorDone }
    }
    return {
        next: function () {
            const result = iterator
            iterator = iterator.next()
            return result
        }
    }
}

let it = makeRangeIterator();
console.log(it.next()) // {value: 0, done: false}
console.log(it.next()) // {value: 1, done: false}
console.log(it.next()) // {value: 2, done: false}
console.log(it.next()) // {"done":true}



console.log('================================')
// ================== 生成器 ======================

function* generator(end = Infinity) {
    yield '1';
    yield '2';
    yield '3';
}
var a = generator(3)
console.log(a.next()) // {value: 0, done: false}
console.log(a.next()) // {value: 1, done: false}
console.log(a.next()) // {value: 2, done: false}
console.log(a.next()) // {"done":true}



console 命令行工具 X clear

                    
>
console