Я читаю "Справочник JavaScript" Флавио Скоупса.Он вводит понятие генераторов.
function* calculator(input) {
var doubleThat = 2 * (yield(input / 2))
var another = yield(doubleThat)
return (input * doubleThat * another)
}
// He then runs the following code
const calc = calculator(10)
console.log(calc.next())
Выход
{value: 5, done: false}
calc.next(7);
Выход:
{value: 14, done: false}
Я понимаю первый вывод, но я не понимаю второй.Почему вывод 14?
Насколько я понимаю, в следующий раз, когда .next()
вызывается на calc
, он должен продолжаться в строке ПОСЛЕ той, на которой он последний раз останавливался.
Ну, вот эта строка: var another = yield(doubleThat)
и значение переменной doubleThat
в этой точке должно быть 10, поэтому я ожидаю, что второй yield вернет объект со значением 10.
Я не думаю, что пример в книге хороший, так как я понимаю концепцию Generators (Python) и Iterators (C ++ / Python), и я понимаю другие примеры Javascript Generators - ноЯ просто не понимаю, что здесь происходит.
Может кто-нибудь объяснить, почему значение, возвращаемое после calc.next(7)
, равно 14?