Как ленивый анализ javascript es6 работает в памяти? - PullRequest
0 голосов
/ 24 апреля 2020

javascipt es6 процесс операции памяти отложенной оценки итератора

Когда речь идет об объекте итератора JavaScript ES6 и вызове next (), говорят, что он работает в форме отложенной оценки.

Если объект-итератор возвращается в качестве функции генератора, функция не выполняется немедленно. Функция next () возвращенного объекта итератора должна быть выполнена для его выполнения. В это время, если формула оценки кода выполнения поднимется в стеке вызовов и достигнет выхода, исчезнет ли она из стека вызовов?

function* loop(num) {

    while(true) {
    yield num + 1;
  }

}

loopIterator = loop(1); // return iterator obj
console.log(loopIterator.next()); // call
console.log(loopIterator.next()); // call

1 Ответ

1 голос
/ 24 апреля 2020

Непонятно, что вы подразумеваете под "повышается в стеке вызовов".

Вызов next() помещает код в функцию генератора в стек вызовов и переходит на место, где он оставлен выкл. Это будет выполняться нормально, оценивая вызовы функций внутри функции генератора, используя обычный стек вызовов. В какой-то момент выполнение встречает ключевое слово yield, которое обязательно находится в кадре стека кода функции генератора. Затем он сохраняет состояние, удаляет код функции генератора из стека вызовов и возвращается из вызова next().

...