利用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语句把函数体分割成了几段,

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容