In ES6, what happens to the arguments in the first call to an iterator's `next` method?

后端 未结 3 1549
暖寄归人
暖寄归人 2020-12-06 13:17

If you have an generator like,

function* f () {
  // Before stuff.
  let a = yield 1;
  let b = yield 2;
  return [a,b];
}

And, then run

3条回答
  •  离开以前
    2020-12-06 13:54

    From MDN Iterators and generators.

    A value passed to next() will be treated as the result of the last yield expression that paused the generator.

    Answers:

    Does the argument in the first call to g.next get lost?

    Since there is no last yield expression that paused the generator on the first call this value is essentially ignored. You can read more in the ECMAScript 2015 Language Specification.

    What happens to them?

    On subsequent calls of next() the value passed will be used as the return value of the last yield expression that paused the generator.

    Using the above example, how do I set a?

    You can do as LJHarb suggested.

    "use strict";
    
    let f = function*() {
    	let a = yield 1;
    	let b = yield 2;
    	return [a, b];
    };
    
    let g = f();
    
    document.querySelector("#log_1").innerHTML = JSON.stringify(g.next());
    document.querySelector("#log_2").innerHTML = JSON.stringify(g.next(123));
    document.querySelector("#log_3").innerHTML = JSON.stringify(g.next(456));

提交回复
热议问题