我正在查看一些Github代码,看起来在yield语句之后有表达式。
链接是here,我正在查看的代码是:
if (curbyte === LF && lastbyte !== CR || curbyte === CR && curpos < bytesRead - 1) {
yield _concat(lineBuffer, readChunk.slice(startpos, curpos));
lineBuffer = undefined;
startpos = curpos + 1;
if (curbyte === CR && readChunk[curpos + 1] === LF) {
startpos++;
curpos++;
}
} else if (curbyte === CR && curpos >= bytesRead - 1) {
lastbyte = curbyte;
}
我会想到行之后的一切:
yield _concat(lineBuffer, readChunk.slice(startpos, curpos));
并且永远不会到达同一if
块内。这对我不正确吗?
答案 0 :(得分:1)
JavaScript是否在yield语句后执行代码?
是的,但不是马上。当生成器产生时,它会暂停,直到迭代器调用next()
为止。然后生成器恢复执行,直到它再次产生。
这在此解释:https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Iterators_and_Generators