JavaScript是否在yield语句后执行代码?

时间:2017-07-21 15:00:09

标签: javascript generator

我正在查看一些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块内。这对我不正确吗?

1 个答案:

答案 0 :(得分:1)

  

JavaScript是否在yield语句后执行代码?

是的,但不是马上。当生成器产生时,它会暂停,直到迭代器调用next()为止。然后生成器恢复执行,直到它再次产生。

这在此解释:https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Iterators_and_Generators