ES6基础之——生成器Generators
手共创建迭代器有点麻烦,我们可以使用Generators去生成迭代器,Generators可以翻译成生成器
先看一下一个简单的生成器,定义一个生成器用的是
1 2 3 4 5 | functions* chef(){ yield 'tomato' ; yield 'eggs' ; } let zhangsan=chef(); |
现在zhangsan就是一个迭代器,可以使用next()方法把他返回的东西输出在控制台,结果如下:
1 2 3 | console.log(zhangsan.next()); //{value:'tomato',done:false} console.log(zhangsan.next()); //{value:'eggs',done:false} console.log(zhangsan.next()); //{value:undefined,done:true} |
下面再改造一下chef生成器:将它接受一个参数,名字为foods,在函数里面使用for循环,每次循环都yield当前循环项
1 2 3 4 5 6 7 8 9 | functions* chef(foods){ for ( var i=0;i<foods.lingth;i++){ yield foods[i] } } let zhangsan=chef([ 'tomato' , 'eggs' ]); console.log(zhangsan.next()); //{value:'tomato',done:false} console.log(zhangsan.next()); //{value:'eggs',done:false} console.log(zhangsan.next()); //{value:undefined,done:true} |
这个生成器也可以使用函数表达的方式创建
1 2 3 4 5 6 7 8 9 | let chef =functions* (foods){ for ( var i=0;i<foods.lingth;i++){ yield foods[i] } } let zhangsan=chef([ 'tomato' , 'eggs' ]); console.log(zhangsan.next()); //{value:'tomato',done:false} console.log(zhangsan.next()); //{value:'eggs',done:false} console.log(zhangsan.next()); //{value:undefined,done:true} |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步