js学习笔记(四)

一、迭代器

1.什么是迭代器?

  迭代器是ES6新增的特性,用来实现不同数据结构之间的遍历。

2.如何实现迭代器模式?

  迭代器模式中的可迭代对象实现了Iterable接口,通过Iterator接口实现迭代,而Iterator接口中又需要实现Symbol.iterator工厂函数。

3.如何使用迭代器?

  迭代器是一种用于迭代与其关联的可迭代对象的一次性使用的对象,迭代器API使用next()方法在可迭代对象中遍历数据。每次成功调用next(),都会返回一个InteratorResult对象,其中包含迭代器返回的下一个值。IteratorResult中包含两个属性,一个是done,代表迭代是否已经完成,另一个属性value代表迭代过程中产生的值。例如:

let arr = ["foo","baz"];
let iter = arr[Symbol.iterator]();
console.log(iter.next());//{done:false,value:'foo'}
console.log(iter.next());//{done:false,value:'baz'}
console.log(iter.next());//{done:true,value:undefined}

二、生成器

1.什么是生成器?

  生成器是ES6新增的可以在函数块内暂停和恢复代码执行的灵活结构,以函数形式体现,在函数名称前面添加一个*号即表示它是一个生成器。

2.如何定义一个生成器?

  只要是可以定义函数的地方,就可以定义生成器,标识生成器函数的星号不受两侧空格的影响。

3.如何执行生成器?

  调用生成器函数会生成一个生成器对象,其开始处于暂停执行状态,生成器对象实现了Iterator接口,可以调用next()方法使生成器开始或恢复执行。生成器函数只会在初次调用next()方法后执行,初次调用next()方法并不会打印日志。

4.如何让生成器中断执行?

  生成器函数在遇到yield关键字之前会正常执行,遇到这个关键字之后,执行会停止,函数的作用域状态会被保留,停止执行的生成器函数只能通过在生成器对象上调用next()方法来恢复执行。使用yield需要注意以下几点:

  • 通过yield关键字退出的生成器函数会出在done:false状态,而通过return关键字退出的生成器函数会处于done:true状态。
  • yield关键字只能在生成器函数内部使用,且必须直接位于生成器函数定义中,用在其它地方,比如嵌套的非生成器函数中都会抛出错误。
  • 上一次让生成器函数暂停的yield关键字会接收到传给next()方法的第一个值,第一次调用next()传入的值不会被使用,因为这一次调用是为了开始执行生成器函数,可以使用yield实现输入和输出。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值