1. 前言介绍
如题所述,理解yield到底是返回后暂停,还是 返回后暂停在下一次yield语句。通过以下程序片段证明是: yield语句是:返回后立即暂停。
2. 验证程序
设计如下js片段:
function *testYieldPausePoint(){
for(let i=0;true;i++){
console.log('___before___'+i+'__')
let reset=yield i;
console.log('___after___'+i+'___');
if(reset){i=-1;}
}
}
执行如图所示:
观察打印消息,容易得出是: yield返回并立即暂停, 在调用下一次next函数时候,在上一条yield语句的下一条语句作为起始位置继续执行。示意如图:
另外:
注意,由于next方法的参数表示上一个yield表达式的返回值,所以在第一次使用next方法时,传递参数是无效的。
所以才有 yIter.next(true) 影响了上一次的yield 设置 reset=true.影响到了本次的i=-1。
甚至可以这样讲 是停留在赋值=号处。
3. 执行结论
s中发生器函数中yield语句 是:返回后立即暂停