利用generator生成迭代器

一.作用及内部原理

generator(生成器)用来创建迭代器,语法非常简洁(function* + yield)

生成器执行yield语句时,生成器的堆栈结构(本地变量、参数、临时值、生成器内部当前的执行位置)被移出堆栈。但生成器对象保留了对这个堆栈结构的引用(备份),所以稍后调用.next()可以重新激活堆栈结构并且继续执行

例如:

// 定义生成器

var gen = function*() {

    console.log('before yield 1');

    yield 1;

    console.log('before yield 2');

    yield 2;

}

// 调用生成器返回迭代器

var iter = gen();

iter.next();    // before yield 1

                // Object {value: 1, done: false}

iter.next();    // before yield 2

                // Object {value: 2, done: false}

iter.next();    // Object {value: undefined, done: true}

iter.next();    // Object {value: undefined, done: true}

yield语句把函数体分割成了几段,

你可能感兴趣的:(利用generator生成迭代器)