为了账号安全,请及时绑定邮箱和手机立即绑定

ES6 中 yield 的问题

ES6 中 yield 的问题

桃花长相依 2019-03-06 13:15:40
${yield} 是如何执行的我在学习 Generator 的时候看到一段不错的代码,自己改了改不知道如何去读,希望有人能解答一下,如下:function* bar() {  console.log('one');  console.log('two');  console.log('three');  yield console.log('test');  console.log(`1. ${yield}`);  console.log(`2. ${yield}`);  return 'result';}let barObj = bar();barObj.next();barObj.next('a');barObj.next('b');返回的结果为:onetwothreetest1. b第一次 next 的时候应该走到了 yield console.log('test')第二次传了一个 a 这个时候程序似乎没有执行
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

首先明确的是a执行了。


barObj.next(); //输出test

barObj.next('a'); //a给了第一个yield,但是没有使用

barObj.next('b'); //b给了第二yield,并输出1. b


查看完整回答
反对 回复 2019-03-16
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

自己又梳理了一下

我们可以把


barObj.next();

barObj.next('a');

barObj.next('b');

改为如下的形式,这样看起来更加的方便


console.log(barObj.next(), barObj.next('a'), barObj.next('b'));

上面的代码应该这么来读

首先要明白 console.log 的返回值是 undefined


next 1.

    console.log('one')...console.log('test');

    return { value: unfefined, done: false }

next 2.

    yield console.log('test') = 'a';

    ${ yield undefined } 写括号是为了方便看,其实没有括号

    return { value: undefined, done: false }

next 3.

    console.log(`1. ${'b'}`);

    return { value: undefined, done: false }


查看完整回答
反对 回复 2019-03-16
  • 3 回答
  • 0 关注
  • 482 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信