2

I have the following code

function coroutine(g) { 
    var it = g(); 
    return () => it.next.apply(it, arguments); 
    // also tried () => { return it.next.apply(it, arguments);
}

var run = coroutine(function* () { 
    var x = 1 + (yield); 
    var y = 1 + (yield); 
    yield (x + y);
});

And the following testing has been executed.

run()
{value: undefined, done: false}
run(10)
{value: undefined, done: false}
run(30).value
"1function* () { var x = 1 + (yield); var y = 1 + (yield); yield (x + y);}1function* () { var x = 1 + (yield); var y = 1 + (yield); yield (x + y);}"

However, shouldn't the last run(30).value returns the value of 42?

However, it works after I change the arrow function to old anonymous function?

function coroutine(g) { 
    var it = g(); 
    return function() { return it.next.apply(it, arguments) }; 
}
ca9163d9
  • 27,283
  • 64
  • 210
  • 413

0 Answers0