gpt4 book ai didi

javascript - 为什么第二个yield首先在这个生成器中返回

转载 作者:行者123 更新时间:2023-12-03 06:26:34 55 4
gpt4 key购买 nike

在下面的代码中,为什么第一个调用next()返回第二个之后的值yield 关键字?

function* generatorFunction() {
yield (yield 'the second yield')();
}

function func(x) {
return 'func passed to the second next()';
}

var iterator = generatorFunction();

var firstValue = iterator.next().value;
var secondValue = iterator.next(func).value;

console.log(firstValue); // "the second yield"
console.log(secondValue); // "func passed to the second next()"

在第一个 next() 上,它将第一个 yield 之后的行的其余部分视为表达式,对吧?这是否意味着 (yield x)() 计算结果为 x,但在计算时实际上并没有在 yield 上暂停?

然后第二次调用 next 传入一个函数,该函数是否取代 (yield 'the secondary yield') 并执行然后返回它的值(value)。

谁能帮忙解释一下这是怎么回事吗?

顺便说一句,这没有任何实际目的,我只是浏览 es6katas .

最佳答案

这是一个很好的例子,但几乎不言自明。

表达式

yield (yield 'the second yield')();

根据operator precedence由内而外地评估.

首先,外部的右侧部分yield被评估,(yield 'the second yield')() .

左功能部分,(yield 'the second yield')首先评估小组。 'the second yield'值从第一个 next() 返回调用时,生成器暂停于内部 yield .

发电机在 next(func) 上恢复调用,yield 'the second yield'评估为发送值( func ),然后右函数部分 func()评估为 'func passed to the second next()' .

最后,外层的左边部分yield被评估,'func passed to the second next()'从第二个 next(func) 返回调用时,生成器已暂停。

关于javascript - 为什么第二个yield首先在这个生成器中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38625597/

55 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com