gpt4 book ai didi

javascript - Elif me Exploring ES6 中的这段代码

转载 作者:行者123 更新时间:2023-11-30 11:10:38 25 4
gpt4 key购买 nike

帮我理解这个例子:

function* genFuncWithReturn() {
yield 'a';
yield 'b';
return 'The result';
}
function* logReturned(genObj) {
const result = yield* genObj;
console.log(result); // (A)
}

结果:

> [...logReturned(genFuncWithReturn())]
The result
[ 'a', 'b' ]

那么,我的问题是为什么以及如何首先生成 return 语句的结果,然后生成递归生成器语句的结果?

最佳答案

[...logReturned(...)] logReturned 终止后生成一个新数组。就在 logReturned 终止之前,它调用 console.log(result)

也许这种 ASCII 艺术有助于理解流程:

┌──────────────────────┐     ┌──────────────────────┐      ┌─────────────────────┐
│[...logReturned(...)] │ │ logReturned │ │ genFuncWithReturn │
└──────────────────────┘ └──────────────────────┘ └─────────────────────┘
│ │ │
│ │ │
│ get next from iterator │ │
│ ─────────────────────────▶ │ get next from iterator │
│ │ ─────────────────────────▶ │
│ │ │
│ │ yield 'a' │
│ yield 'a' │ ◀───────────────────────── │
│ ◀───────────────────────── │ │
│ │ │
(remembers 'a') │ │
│ │ │
│ get next from iterator │ │
│ ─────────────────────────▶ │ get next from iterator │
│ │ ─────────────────────────▶ │
│ │ │
│ │ yield 'b' │
│ yield 'b' │ ◀───────────────────────── │
│ ◀───────────────────────── │ │
│ │ │
(remembers 'b') │ │
│ │ │
│ get next from iterator │ │
│ ─────────────────────────▶ │ get next from iterator │
│ │ ─────────────────────────▶ │
│ │ │
│ │ done, return 'The result' │
│ │ ◀───────────────────────── │
│ │ │
│ console.log(result) (terminates)
│ │
│ done │
return │ ◀───────────────────────── │
['a', 'b'] │ │
◀───────────│ (terminates)

关于javascript - Elif me Exploring ES6 中的这段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53875229/

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