gpt4 book ai didi

Javascript 生成器问题 - 解释这段代码

转载 作者:数据小太阳 更新时间:2023-10-29 06:04:05 24 4
gpt4 key购买 nike

我正在阅读 Flavio Scopes 的“The JavaScript Handbook”。他介绍了生成器的概念。

function* calculator(input) {
var doubleThat = 2 * (yield(input / 2))
var another = yield(doubleThat)
return (input * doubleThat * another)
}

// He then runs the following code

const calc = calculator(10)
console.log(calc.next())

输出

{value: 5, done: false}

calc.next(7);

输出:

{value: 14, done: false}

我理解第一个输出,但我不理解第二个输出。为什么输出是14?

我的理解是,下一次 .next()calc 上调用时,它应该在 AFTER 行上继续它最后暂停了。

好吧,那一行是:var another = yield(doubleThat) 那时变量 doubleThat 的值应该是 10,所以我期望第二个 yield 返回一个值为 10 的对象。

我认为书中的示例不是很好,因为我了解生成器 (Python) 和迭代器 (C++/Python) 的概念,并且我了解生成器的其他 Javascript 示例 - 但我就是不了解了解这里发生了什么。

谁能解释一下为什么 calc.next(7) 之后返回的值是 14?

最佳答案

.next(7) 的调用为第一个 yield 表达式提供了一个值,覆盖了它之前计算的值 5 并且回来。这是一种双向关系。明确地说,第一个 yield “暂停”中间表达式。从该表达式内部继续执行,而不是下一个语句。

也就是说,我倾向于同意这是一个有问题的例子,因为我不确定这是不是现实情况。很难想象为某些实际应用程序专门构建的代码。

关于Javascript 生成器问题 - 解释这段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56040825/

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