Generator作用
Generator 函数,可以通过 yield 关键字,
把函数的执行流挂起,为改变执行流程提供了可能
Generator 有两个区分于普通函数的部分:
1.一是在 function 后面,函数名之前有个 * ;
2.函数内部有 yield 表达式。
3.其中 * 用来表示函数为 Generator 函数,yield 用来定义函数内部的状态。
done
此时函数还没有执行完, 返回对象的 done 属性值是 false,下面还有yield。
next 方法
一般情况下,next 方法不传入参数的时候,yield 表达式的返回值是 undefined 。
当 next 传入参数的时候,该参数会作为上一步yield的返回值。
yield 后面跟的值是value值,next(参数)==yield返回值需要用变量接收
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
// Generator作用
// Generator 函数,可以通过 yield 关键字,
// 把函数的执行流挂起,为改变执行流程提供了可能
// Generator 有两个区分于普通函数的部分:
// 1.一是在 function 后面,函数名之前有个 * ;
// 2.函数内部有 yield 表达式。
// 3.其中 * 用来表示函数为 Generator 函数,yield 用来定义函数内部的状态。
// done
// 此时函数还没有执行完, 返回对象的 done 属性值是 false,下面还有yield。
// next 方法
// 一般情况下,next 方法不传入参数的时候,yield 表达式的返回值是 undefined 。
// 当 next 传入参数的时候,该参数会作为上一步yield的返回值。
// yield 后面跟的值是value值,next(参数)==yield返回值需要用变量接收
// function* func(){
// console.log("one");
// yield;
// console.log("two");
// yield {name:"zs"};
// console.log("three");
// return '3';
// }
// function* func(){
// console.log("one");
// var a = yield 99;
// console.log("two"+a);
// return "foo";
// yield;
// console.log("three");
// return '3';
// }
// let f = func();
// console.log(f.next());
// console.log(f.next(10));
// console.log(f.next());
// console.log(f.return("foo"));
// console.log(f.next());
// f.next();
// f.next();
// console.log(f.next());
// var g = function* () {
// try {
// console.log("one");
// yield 5;
// } catch (e) {
// console.log(1111111111);
// console.log('catch inner', e);
// }
// };
// var i = g();
// console.log(i.next());
// try {
// i.throw('b');
// i.throw('a');
// } catch (e) {
// console.log(2222222222);
// console.log('catch outside', e);
// }
// function* callee() {
// console.log('callee: ' + (yield));
// yield;
// console.log('callee: ' );
// }
// var f = callee();
// f.next();
// f.next();
// console.log(f.next());
// console.log(f.next());
// function* caller() {
// while (true) {
// yield* callee();
// }
// }
// var f = caller();
// console.log(f.next());
// console.log(f.next());
// console.log(f.next());
function* callee() {
console.log('callee: ' + (yield));
}
var callee = callee();
function* caller() {
console.log(callee);
while (true) {
for (var value of callee) {
yield value;
console.log(value);
}
}
}
var f = caller();
console.log(f.next());
</script>
</html>