es6 generator执行顺序
教程例子如下:
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。
教程没详细解释整个流程,所以不清楚我思路错在哪里。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
yield 是生成器的暂停点,
yield 从外部带入的值是恢复执行的时候带入的。
第二个 console.log 还没执行到,执行权就跑出去了,所以第一次 next 是停在了第二个 log 的字符串求插值的地方。直到第二次 next 送进来一个 a ,才继续用 a 当值进行插值,得到参数调用 console.log.