当执行到 yield 语句时 , Generator 的栈帧同样会被弹出栈外 , 但 Generator 在这里耍了个花招 —— 它在堆里保存了栈帧的引用(或拷贝)!这样当 it.next 方法被调用时 , JS 引擎便不会重新创建一个栈帧 , 而是把堆里的栈帧直接入栈 。因为栈帧里保存了函数执行所需的全部上下文以及当前执行的位置 , 所以当这一切都被恢复如初之时 , 就好像程序从原本暂停的地方继续向前执行了 。
而因为每次 yield 和 it.next 都对应一次出栈和入栈 , 所以可以直接利用已有的栈机制 , 实现值的传出和传入 。
推荐阅读
- 位运算及其妙用
- 详解 Linux 中的虚拟文件系统
- 女儿眼中的茶文化
- 怎么购选祁门红茶
- 10 个短小却超实用的 JavaScript 代码段
- 都在提的人工智能,其中的算法是什么?其实高中的知识就有
- 二十行代码实现JavaScript在本地生成pdf文件
- 性幻想在性爱中的五大作用
- 绿茶瘦身几法
- 电影赤壁中的茶道文化
