${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
慕尼黑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 }
添加回答
举报
0/150
提交
取消