javascipt es6迭代器懒惰评估在内存中是如何操作的?

问题描述 投票:0回答:1

javascipt es6迭代器懒惰评估内存操作流程

说到JavaScript ES6的迭代器对象和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
javascript ecmascript-6 iterator generator
1个回答
1
投票

不清楚你说的 "上调用栈 "是什么意思。

next() 将生成函数中的代码放在调用堆栈上,并跳转到它离开的地方。这样就会正常执行,正常使用调用栈评估生成函数内部的函数调用。在某些时候,执行过程中遇到了一个 yield 关键字,它必然在生成函数代码的堆栈框架中。然后,它存储状态,从调用栈中删除生成器函数代码,然后从 next() 呼叫。

© www.soinside.com 2019 - 2024. All rights reserved.