javascript - javascript es6 迭代器惰性求值如何在内存中工作?
问题描述
javascipt es6迭代器惰性求值内存操作流程
当涉及到 JavaScript ES6 迭代器对象和 next() 调用时,据说是以延迟评估形式运行的。
如果迭代器对象作为生成器函数返回,则该函数不会立即执行。必须执行返回的迭代器对象的 next() 函数才能执行它。这时候如果执行代码求值公式在调用栈上向上,遇到yield,会不会从调用栈中消失?
function* loop(num) {
while(true) {
yield num + 1;
}
}
loopIterator = loop(1); // return iterator obj
console.log(loopIterator.next()); // call
console.log(loopIterator.next()); // call
解决方案
目前尚不清楚“在调用堆栈上上升”是什么意思。
调用next()
将生成器函数中的代码放在调用堆栈上并跳转到它停止的地方。这将正常执行,正常使用调用堆栈评估生成器函数内部的函数调用。在某个时刻,执行遇到了一个yield
关键字,该关键字必然在生成器函数代码的堆栈帧中。然后它存储状态,从调用堆栈中删除生成器函数代码,并从next()
调用中返回。
推荐阅读
- python - 用 Selenium 看不到部分标签内的数据
- reactjs - React-beautiful-dnd 与其他 Dragging 包的冲突
- spring - 无法实例化 [org.hibernate.SessionFactory]
- javascript - 网站的 JavaScript 预加载器,它不工作的 IE,
- azure-storage - 是否有 .NET SDK 通过 AAD 身份验证获取表存储 SAS 密钥
- java - 无法解析导入的 org.apache.commons.codec
- node.js - 使用 Webpack 将 React/Node.js docker 容器与 Appdynamics 捆绑会引发错误
- swiftui - 获取问题@State绑定表单模型到视图 - Swift UI
- reactjs - 反应中渲染的性能提升
- jenkins - 更改 Jenkins 参数变量值