美文网首页
迭代器,生成器和yield

迭代器,生成器和yield

作者: 逍天辰 | 来源:发表于2015-08-27 15:06 被阅读0次

迭代器, 生成器, yield 都是ES6 中的新语法

迭代器

迭代器由三个方法组成:

  1. hasNext() 是否还有下一个元素
  2. next() 迭代到下一个元素
  3. reset() 重置,一般用来抛出异常
    下面是一个简单的迭代器的例子:
    function Range(min,max){//[min,max)
    return {
    cur:min,
    hasNext:function(){
    return this.cur<max;
    },
    next:function(){
    return this.cur++;
    },
    reset:function(){
    throw new Error('unsupportted operation');
    }
    }
    }
    for(var iter = Range(1,10);iter.hasNext();){
    i = iter.next();
    console.log(i);
    }

可以看到, 每次在使用Range 函数的时候, 都要调用 .hasNext() 方法来判断一下是否还有下一个元素,之后再执行 .next() 函数。

生成器和yield

普通的函数以 function 来定义, 而生成器函数则是由 function* 来定义。可以说 生成器是一种更好的实现迭代器的方式。

yield 的作用: yield可以看出是“暂停”了函数的执行, 然后在调用函数的.next() 方法之后, 函数开始执行直到下一个 yield的表达式。
上边的生成器代码可以改变为:

function* Range(start, end) {
    for(var i = start; i<end;i ++) {
       yield i;    (2)
    }
}

var range = Range(1,10); // (1)
while(true) {
var ran = range.next(); // (3)
if(ran.done) break;
console.log(ran);
}
输出的结果 :

{ value: 1, done: false} 

value: 表示当前的值,即yield 之后的返回,
done: 表示当前的循环是否已经完成,true 为完成。
函数的运行方式为
(1), (3), (2), (3), (2), (3), (2)......
正好可以验证我们之前所说的 “暂停”

注意
如果我们调用range函数, 第一次的返回值是一个空的 generator Object

var kk = Range(1,10);
console.log(kk);

输出为:

{}

相关文章

  • PHP高级用法

    一、迭代器 二、生成器 三、yield 四、协程

  • python 如何使用生成器函数实现可迭代对象?

    生成器对象和迭代器对象相似,支持 next()生成器使用关键字 yield生成器对象也是可迭代对象使用生成器函数的...

  • 生成器、迭代器、闭包、装饰器区别

    生成器定义: generator:生成器本质上就是迭代器 获取生成器: yield 和 return的区别: yi...

  • python2高级迭代器

    1 #generator 生成器 yield() 2 #Iterator 迭代器 iter() 3 #It...

  • 迭代器,生成器和yield

    迭代器, 生成器, yield 都是ES6 中的新语法 迭代器 迭代器由三个方法组成: hasNext() 是否还...

  • python之yield和yield from

    yield,使用 yield 的函数被称为生成器(generator),跟普通函数不同的是,生成器是一个返回迭代器...

  • Python基础知识

    一、迭代器、生成器和yield语句 1、迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式; 迭...

  • 01.07 笔记 - 生成器

    1. 什么是生成器 生成器就是迭代器,迭代器不一定是生成器 2. 生成器怎么生产元素 调用一个带有yield的关键...

  • 2019-01-07

    ''' 1.什么是生成器 生成器就是迭代器,迭代器不一定是生成器2.生成器怎么生成元素 调用一个带有yield关键...

  • 生成器、迭代器

    生成器 生成器表达式:(x ** 2 for x in range(1, 11)) yield关键字 迭代器 __...

网友评论

      本文标题:迭代器,生成器和yield

      本文链接:https://www.haomeiwen.com/subject/rhmhcttx.html