教程例子如下:
function* dataConsumer() {
console.log('Started');
console.log(`1. ${yield}`);
console.log(`2. ${yield}`);
return 'result';
}
let genObj = dataConsumer();
genObj.next(); // Started
genObj.next('a') // 1. a
genObj.next('b') // 2. b
上面代码实际跑,效果相同。
我认为的效果是
let genObj = dataConsumer();
genObj.next(); // Started 1. undefined
genObj.next('a'); // 2. a
要执行到yield才算遍历器对象的next方法执行结束,所以第一次next会将前两条console.log都会跑完。由于第一次使用next方法,参数是无效的,yielld没定义值,所以呈现为undefined。
教程没详细解释整个流程,所以不清楚我思路错在哪里。