Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

《你不知道的Javascript》:生成器 #61

Open
shinena opened this issue Mar 4, 2023 · 0 comments
Open

《你不知道的Javascript》:生成器 #61

shinena opened this issue Mar 4, 2023 · 0 comments

Comments

@shinena
Copy link
Owner

shinena commented Mar 4, 2023

生成器

ES6的一个新的函数类型。
可以在运行当中(完全保持其状态)暂停,并且将来再从暂停的地方恢复运行。
这种交替的暂停是合作性的而不是抢占式的。这意味着生成器具有独一无二的能力来暂停自身,这是通过关键字yield实现的。只有控制生成器的迭代器具有恢复生成器的能力(通过next())。

yield/next()不只是一种控制机制,也是一种双向消息传递机制。yield表达式本质上是暂停下来等待某个值,接下来的next()调用会被暂停的yield表达式传回一个值(或者是隐式的undefined)。
在异步控制流程方面,生成器的优点:生成器内部的代码是以自然的同步/顺序方式表达任务的一系列步骤。我们把可能的异步隐藏在了关键字yield的后面,把异步移动到控制生成器的迭代器的代码部分。
生成器为异步代码保持了顺序、同步、阻塞的代码模式,解决了基于回调的异步的两个关键缺陷之一。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant