以下内容是学习时的笔记,仅供自己学习使用。
yiedl关键字可以让生成器停止执行和开始执行,相当于一个特殊的return。当生成器碰到yield时会停止执行,并且函数作用域会得到保留,停止运行后可以通过next()方法来恢复运行。
function* test() {
yield;
yield 'aaa';
}
let a = test();
console.log(a.next()); // [done: false,value: undefined]
console.log(a.next()); // [done: false, value: 'aaa']
碰到yield而停止执行时返回的done是false,而通过return退出时done是true 。
可以通过yield实现输入输出。上一次执行的yield会接收next()方法的第一个值,但第一次执行next()除外。
function *test(init) {
console.log(init);
console.log(yield);
console.log(yield);
}
let a = test('one');
a.next(); // one
a.next('two'); // two
a.next('three');// three
加深理解下:
function * test(x) {
var y = 2*(yield(x + 1));
var z = yield(y/3);
console.log(`x:${x} y:${y} z: ${z}`);
return x+y+z;
}
let a = test(3);
a.next(); // [done:false,value:4]
a.next(3); // [done:false,value:2]
a.next(4); // x: 3 y: 6 z: 4
yield关键字会返回它右边表达式的值,功能相当与return,除第一次执行next()方法外,每次执行next()方法的第一个参数的值就成为上一个yield的值,比如上一个例子中,当执行a.next(3)时,yield的值就变成了3.