ES6-Generator基础用法
Generator简介:
生成器,本身是函数,执行后返回迭代对象,函数内部要配合yield使用Generator函数会分段执行,遇到yield暂停。
使用Generator注意点:function 和函数名之间需要带 *
function* text(){ }
Generator的yield注意点:yield是ES6新关键字,作用是使Generator(生成器)函数暂停。
function* text(){ yield 'a'; yield 'b'; yield 'c'; return 'd'; } let iterationObj = text(); console.log(iterationObj.next());//{value: "a", done: false} console.log(iterationObj.next());//{value: "b", done: false} console.log(iterationObj.next());//{value: "c", done: false} console.log(iterationObj.next());//{value: "d", done: true} yield后,必须return最后一个值,如果不return最后一个值value为undefined。 当每次执行后返回{value, done}value值是当次执行yield里面的值,done值是当次执行看看代码执行到第几行,如果到最后一行返回true,其他返回false
那么我们如何证明当遇到yield函数暂停。
function* text(){ yield 'a'; console.log('1'); yield 'b'; console.log('2'); yield 'c'; console.log('3'); return 'd' } let iterationObj = text(); console.log(iterationObj.next());//因为第一行是yield碰到暂停输出:{value: "a", done: false} console.log(iterationObj.next());//执行第二行输出:1 然后碰到yield暂停输出:{value: "b", done: false}
当yield被变量接收,下一次执行参数就是上一个变量的值。
function* text(){ let value = yield 'a'; console.log(value); let value1 = yield 'b'; console.log(value1); let value2 = yield 'c'; console.log(value2); return 'd' } let iterationObj = text(); console.log(iterationObj.next());//{value: "a", done: false} 因为第一个是执行yield所以直接暂停不输出第二行的console.log console.log(iterationObj.next('22')); 那么打印结果就是{value: "a", done: false} 22 {value: "b", done: false}