一、生成器(generator)
形如 function* () { }
的函数为生成器函数
二、yield关键字
yield
关键字要配合生成器使用- 生成器中的
yield
的作用类似与return
,会返回一个Generator
对象(Generator
本质是一个特殊的Iterator
)。function* generatorFunc() { let arr = [1, 2]; for(let i=0; i<arr.length; i++){ yield arr[i]; } } let gn = generatorFunc(); gn.next(); // {value: 1, done: false} gn.next(); // {value: 2, done: false} gn.next(); // {value: undefined, done: true} // 或者使用 for...of 遍历生成器
next()
方法往函数中传值function* generatorFunc2(_a) { let x = 2 * (yield _a + 1); console.log(`x的值为:${x}`); let y = 7 + (yield x) console.log(`y的值为:${y}`); yield y } let gn = generatorFunc2(5); gn.next(); // {value: 6, done: false} gn.next(5); // {value: 10, done: false} // x的值为:10 gn.next(4); // {value: 11, done: false} // y的值为:11 gn.next(); // {value: undefined, done: true}
- 生成器中使用
return
function* generatorFunc3() { let arr = [1, 2]; for(let i=0; i<arr.length; i++){ yield arr[i]; } return 'done'; return 'done2'; } let gn = generatorFunc3(); gn.next(); // {value: 1, done: false} gn.next(); // {value: 2, done: false} gn.next(); // {value: 'done', done: true} gn.next(); // {value: undefined, done: true}