执行上下文堆栈。使用生成器功能违反LIFO订单

时间:2018-01-21 10:18:51

标签: javascript ecmascript-6

某些ECMAScript特性可能违反了执行上下文堆栈中正在运行的执行上下文的LIFO顺序转换的规范says

  

执行期间正在运行的执行上下文状态的转换   上下文通常以堆栈式的后进/先出方式发生。   但是,某些ECMAScript功能需要非LIFO转换   运行执行上下文。

然而,规范并没有明确说明具体到底是什么。

我已经读过使用发电机功能时可能发生的违规行为。但我绝对不明白为什么。 Morover我无法在规范的25.3.3部分找到任何提及的内容。

function *gen() {
    yield 1;
    return 2;
}

let g = new gen();

console.log(g.next().value);

// some other operations

console.log(g.next().value);

据我所知,上面的例子中执行上下文堆栈的生命周期可能如下所示:

EC(global)

->

EC(gen1)
EC(global)

->

EC(global)

->

EC(gen2)
EC(global)

->

EC(global)

所以我在这里看不到任何LIFO违规行为。

可能是发电机功能甚至不会导致这种违规行为?或者,可能是,我误读了规范。无论如何,你能否解释一下使用生成器时执行上下文栈的情况?并且运行执行上下文转换的LIFO顺序如何(以及为什么)违反了?

0 个答案:

没有答案