ES6基础之——生成器Generators
手共创建迭代器有点麻烦,我们可以使用Generators去生成迭代器,Generators可以翻译成生成器
先看一下一个简单的生成器,定义一个生成器用的是
functions* chef(){ yield 'tomato'; yield 'eggs'; } let zhangsan=chef();
现在zhangsan就是一个迭代器,可以使用next()方法把他返回的东西输出在控制台,结果如下:
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当前循环项
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}
这个生成器也可以使用函数表达的方式创建
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}