首页 > 解决方案 > 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

标签: javascriptecmascript-6iteratorgenerator

解决方案


目前尚不清楚“在调用堆栈上上升”是什么意思。

调用next()将生成器函数中的代码放在调用堆栈上并跳转到它停止的地方。这将正常执行,正常使用调用堆栈评估生成器函数内部的函数调用。在某个时刻,执行遇到了一个yield关键字,该关键字必然在生成器函数代码的堆栈帧中。然后它存储状态,从调用堆栈中删除生成器函数代码,并从next() 调用中返回。


推荐阅读