一,Generator 函数特性
Generator 函数特性,可以通过 yield 关键字,
把函数的执行流挂起,为改变执行流程提供了可能
Generator 有两个区分于普通函数的部分:
1.一是在 function 后面,函数名之前有个 * ;
2.函数内部有 yield 表达式。
3.其中 * 用来表示函数为 Generator 函数,yield 用来定义函数内部的状态。
- next()调用
- 一般情况下,next 方法不传入参数的时候,yield 表达式的返回值是 undefined 。
- 当 next 传入参数的时候,该参数会作为上一步yield的返回值。
- done表示函数是否执行完,true执行完,否则false
- value获取的是yield后面的值
- return 方法
return 方法返回给定值,并结束遍历 Generator 函数。
return 方法提供参数时,返回该参数;不提供参数时,返回 undefined 。
function* func(){
console.log("one");
var a = yield 1;
console.log("two"+a);
var b = yield 2;
return 99;
console.log("three"+b);
yield 3;
console.log("flor");
return 4;
}
var f = func();
console.log(f.next());
console.log(f.next(10));
f.return(88);
console.log(f.next(20));
console.log(f.next());
var g = function* () {
try {
yield;
} catch (e) {
console.log('catch inner', e);
}
};
var sum = g();
sum.next();
console.log(sum.next());
console.log(sum.next());
try {
sum.throw('a');
sum.throw('b');
} catch (e) {
console.log('catch outside', e);
}
function* callee() {
// console.log('callee: ' + (yield));
// yield;
// console.log('callee: ');
// }
// var f = callee();
// console.log(f.next());
// console.log(f.next());
// function* func() {
// while (true) {
// yield* callee();
// }
// }
// var f = func();
// console.log(f.next());
// function* callee() {
// console.log('callee: ' + (yield));
// }
// var callee = callee();
// function* func() {
// while (true) {
// for(var value of callee){
// yield value;
// }
// }
// }
// var f = func();
// console.log(f.next());