您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
ES6_Generator函数简介_01
发布时间:2019-11-03 17:18:40编辑:雪饮阅读()
generator
//generator的声明特点就是function后面多了一个星号
function* myGenerator(){
console.log('next1');
yield 'hello';
console.log('next2');
yield 'generator';
console.log('next3');
yield 'ge1';
}
//直接调用generator函数并不会执行其方法体的语句
let mg=myGenerator();
/*
只有generator函数调用的返回结果,这里暂且叫他为实例吧
那么只有generator实例执行next方法才会执行generator的方法体
并且每次next只执行只要碰到yield就会把yield其后的一个语句执行结束就暂停,下次执行next则仅跟其后
而每次next执行的返回值和iterator中的next一样,除非有显式声明某个yield的返回值
*/
mg.next();
//查看next执行的返回值
console.log('return val',mg.next());
自定义返回值
//默认所有next执行完毕后返回的还是next默认对象
function* myGenerator(){
console.log('next1');
yield 'hello';
console.log('next2');
yield 'generator';
console.log('next3');
yield 'ge1';
}
let mg=myGenerator();
console.log('return val',mg.next());
console.log('return val',mg.next());
console.log('return val',mg.next());
console.log('return val',mg.next());
//但可以在方法体中显示声明返回值,虽然返回还是默认next对象,但对象的value属性值是你显示声明的返回值
console.log('++++++++++++++++++++++++++++');
function* myGenerator2(){
console.log('next1');
yield 'hello';
console.log('next2');
yield 'generator';
console.log('next3');
yield 'ge1';
return 'kasumi';
}
let mg2=myGenerator2();
console.log('return val2',mg2.next());
console.log('return val2',mg2.next());
console.log('return val2',mg2.next());
console.log('return val2',mg2.next());
自定义某个yield返回值
有如下:
function* myGenerator2(){
console.log('next1');
console.log(yield 'hello');
console.log('next2');
yield 'generator';
console.log('next3');
yield 'ge1';
return 'kasumi';
}
let mg2=myGenerator2();
console.log('return val2',mg2.next());
console.log('return val2',mg2.next('aaaaa'));
从该代码执行第一次next则在'generator'返回默认的next对象,而第二次next执行后就到了'ge1'处,而这次因为有声明执行next时的参数,所以第二次执行到'ge1'的返回值就是你给第二次next调用所传的参数值,而且该次返回和上面返回还有异样,这次返回的是你传的参数整体,而不是像上面一样仅仅做为某个对象的子属性value的值存在
关键字词:es6,generator
上一篇:linux批量查找替换文件内容