Я пытаюсь лучше понять, как работают генераторы в javascript.
От MDN:
Объявление функции * (ключевое слово функции, сопровождаемое звездочкой) определяетфункция генератора, которая возвращает объект Generator.
function *range(from, to) {
var counter = from;
while(to >= counter) {
yield counter
counter++
}
}
for (var r of range(5, 10)) {
console.log( r );
}
// print: 5, 6, 7, 8, 9, 10
Я не уверен, насколько точно понимаю, что происходит в приведенном выше фрагменте кода.
Генераторы не должны вызываться, храниться как объекты (генераторы) и затем вызываться методом next()
.(как показано ниже)
function *foo () {
yield 'woo';
}
var G = foo();
console.log( G.next() );
В приведенном выше коде в строке 4 с var G = foo();
Я не , вызывающим функцию и создающим новый контекст выполнения, это должно просто вернуть объект генератора(и храните его под этикеткой G
).
Я вызову реальную функцию foo
, когда я вызову для нее метод next()
, в строке 5. В этот момент я создаю контекст выполнения, выполняя код внутри foo
и выдает строку "woo"
.
Как именно должен работать первый фрагмент?