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
不清楚你说的 "上调用栈 "是什么意思。
对 next()
将生成函数中的代码放在调用堆栈上,并跳转到它离开的地方。这样就会正常执行,正常使用调用栈评估生成函数内部的函数调用。在某些时候,执行过程中遇到了一个 yield
关键字,它必然在生成函数代码的堆栈框架中。然后,它存储状态,从调用栈中删除生成器函数代码,然后从 next()
呼叫。